| by Arround The Web | No comments

coreutils @ Savannah: coreutils-9.10 released [stable]

This is to announce coreutils-9.10, a stable release.

Notable changes include:
- Options in man pages link directly into the full web docs
- timeout(1) now kills the command for all terminating signals
- paste(1) is now multi-byte character aware
- cp(1) fixes an unlikely infinite loop introduced in v9.9
- The multi-call binary is 3.2% smaller

There have also been many bug fixes and other changes
as summarized in the NEWS below.

There have been 288 commits by 10 people in the 12 weeks since 9.9.
Thanks to everyone who has contributed!
The following people contributed changes to this release:

  Bernhard Voelker (1)
  Bruno Haible (1)
  Christopher Illarionova (2)
  Collin Funk (92)
  Dmitry V. Levin (1)
  Egmont Koblinger (3)
  Paul Eggert (14)
  Padraig Brady (159)
  Sylvestre Ledru (5)
  oech3 (10)

Padraig [on behalf of the coreutils maintainers] ==================================================================

Here is the GNU coreutils home page:
    https://gnu.org/s/coreutils/

Here are the compressed sources:
  https://ftp.gnu.org/gnu/coreutils/coreutils-9.10.tar.gz   (15MB)
  https://ftp.gnu.org/gnu/coreutils/coreutils-9.10.tar.xz   (6.3MB)

Here are the GPG detached signatures:
  https://ftp.gnu.org/gnu/coreutils/coreutils-9.10.tar.gz.sig
  https://ftp.gnu.org/gnu/coreutils/coreutils-9.10.tar.xz.sig

Use a mirror for higher download bandwidth:
  https://www.gnu.org/order/ftp.html

Here are the SHA256 and SHA3-256 checksums:

SHA256 (coreutils-9.10.tar.gz) = 4L3h+2hQlEf8cjzyUX6KjH+kZ2mRm7dJDtNQoukjhWI=
SHA3-256 (coreutils-9.10.tar.gz) = ajdC0yoxKq5sDXyeL9nMXNSZ26du/3QtZCEo4PNZZkA=
SHA256 (coreutils-9.10.tar.xz) = FlNamt8LEANzZOLWEqrT2fTso6NElJztdNEvr0vVHSU=
SHA3-256 (coreutils-9.10.tar.xz) = jUv9Ki9gdL5VuXEhDhGyuR+Md4r2PAnkJ9JCw1xdoWY=

Verify the base64 SHA256 checksum with 'cksum -a sha256 --check'
from coreutils-9.2 or OpenBSD's cksum since 2007.

Verify the base64 SHA3-256 checksum with 'cksum -a sha3 --check'
from coreutils-9.8.

Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:

  gpg --verify coreutils-9.10.tar.xz.sig

The signature should match the fingerprint of the following key:

  pub   rsa4096/0xDF6FD971306037D9 2011-09-23 [SC]         Key fingerprint = 6C37 DC12 121A 5006 BC1D  B804 DF6F D971 3060 37D9
  uid                   [ultimate] Pádraig Brady <P@draigBrady.com>
  uid                   [ultimate] Pádraig Brady <pixelbeat@gnu.org>

If that command fails because you don't have the required public key,
or that public key has expired, try the following commands to retrieve
or refresh it, and then rerun the 'gpg --verify' command.

  gpg --locate-external-key P@draigBrady.com

  gpg --recv-keys DF6FD971306037D9

  wget -q -O- 'https://savannah.gnu.org/project/release-gpgkeys.php?group=coreutils&download=1' | gpg --import -

As a last resort to find the key, you can try the official GNU
keyring:

  wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg
  gpg --keyring gnu-keyring.gpg --verify coreutils-9.10.tar.xz.sig

This release is based on the coreutils git repository, available as

  git clone https://https.git.savannah.gnu.org/git/coreutils.git

with commit 89b2cd58ac895e3fc0d24d8f10e7e4ba132e7fb6 tagged as v9.10.

For a summary of changes and contributors, see:

  https://gitweb.git.savannah.gnu.org/gitweb/?p=coreutils.git;a=shortlog;h=v9.10

or run this command from a git-cloned coreutils directory:

  git shortlog v9.9..v9.10

This release was bootstrapped with the following tools:
  Autoconf 2.72.101-9513b
  Automake 1.18.1
  Gnulib 2026-01-24 1c5e0277c2143dd570d8c88f8923eed2afd8e13b
  Bison 3.8.2

NEWS

* Noteworthy changes in release 9.10 (2026-02-04) [stable]

** Bug fixes

  cp, install, and mv no longer enter an infinite loop copying sparse files
  with SEEK_HOLE.  E.g., this was seen on ext4 when copying sparse files with
  extents that are being actively updated, and copy offload is not being used.
  [bug introduced in coreutils-9.9]

  'date' no longer fails with format directives that return an empty string.
  [bug introduced in coreutils-9.9]

  'dd seek=N of=FILE' no longer continues copying, overwriting FILE if it
  exists, if ftruncate fails.
  [bug introduced in coreutils-9.1]

  du and ls no longer modify strings returned by getenv.
  POSIX says this is not portable.
  [bug introduced in fileutils-4.1.6]

  'fmt' now correctly diagnoses read errors.
  Previously fmt generated a generic error for any read error.
  [bug introduced in coreutils-9.0]

  md5sum --text correctly translates CRLF line endings with the MSYS2 runtime.
  This also applies to the sha*sum and b2sum utilities.
  [This bug was present in "the beginning".]

  'numfmt' no longer drops custom suffixes from numbers it cannot fully parse.
  [bug introduced with numfmt in coreutils-8.21]

  'tail -f --pid' can no longer exit upon receiving a non terminating signal.
  On older Linux systems it may have failed with "Interrupted system call".
  [bug introduced in coreutils-7.5]

  'timeout' will now propagate all terminating signals to the monitored command.
  Previously 'timeout' could have exited and left the monitored command running.
  [bug introduced with timeout in coreutils-7.0]

  wc now documents its --debug option, currently used to
  indicate the line count acceleration being used.
  [bug introduced in coreutils-9.0]

  When built with `clang -fno-inline`, memory allocation issues are again
  handled in a defined manner.  Previously programs may have crashed etc.
  after a failure to allocate memory.
  [bug introduced in coreutils-9.0]

** New Features

  configure accepts a new --enable-single-binary=hardlinks mode to build the
  selected programs as hard links to a multi-call binary called "coreutils".
  This augments the existing "symlinks" and "shebangs" modes already
  supported by the --enable-single-binary option.

  'stat' and 'tail' now know about the "guest-memfd" file system type.
  stat -f -c%T now reports the file system type,
  and tail -f uses polling for this file system.

  'tail' now accepts the --debug option, which is currently used to
  detail the --follow implementation being used.

  'du' now supports the short option -A corresponding to the existing long
  option --apparent-size, for compatibility with FreeBSD.

** Changes in behavior

  All commands now markup option names in --help and man pages,
  with bold attributes, and hyperlinks into the online manual on gnu.org.
  The links can be configured with the --enable-manual-url configure option,
  and the bold highlighting with --disable-bold-man-page-references.
  At runtime all markup can be disabled with the TERM=dumb env var value.

  'fmt' -w,--width no longer includes '\n' in the width of a line.
  I.e., the specified width is interpreted to be an _inclusive_ maximum.

  'ls --hyperlink' now uses more standard format hyperlinks.
  'ESC\' (ST) is now used as a delimiter, instead of '\a' (BEL).

  'ptx' -t is no longer a no-op, and now sets the default width to 100 columns.

  'timeout' now honors ignored signals and will not propagate them.  E.g.,
  timeout(1) in a shell backgrounded job, will not terminate upon receiving
  SIGINT or SIGQUIT, as these are ignored by default in shell background jobs.

  'timeout -v -s 0' now prints the signal number 0 instead of EXIT.

  The multi-call binary now only processes --help or --version options
  if it is installed with a name ending with "coreutils".  This allows
  for more consistent handling of these options with unsupported commands.

** Improvements

  The multi-call binary built with configure --enable-single-binary
  is reduced in size by 3.2% through the more efficient reuse of the cksum
  utility by the md5sum and sha*sum utilities.

  'cksum' now validates its options more consistently.
  E.g., `cksum --text --tag` now fails like `cksum --tag --text` already did.

  'cksum', 'du', and 'wc' now exit promptly upon receiving a write
  error, which is significant when processing many input files.

  csplit, ls, and sort, now handle a more complete set of terminating signals.

  'du' now processes directories with 10,000 or more entries up to 9 times
  faster on the Lustre file system.

  'paste' now supports multi-byte --delimiters characters.

  'pinky' will now exit immediately upon receiving a write error, which is
  significant when reading large plan or project files.

  'readlink' and 'realpath' will now exit promptly upon receiving a write error,
  which is significant when canonicalizing multiple file names longer than
  PATH_MAX.

  'timeout' on Linux will always terminate the child in the case where the
  timeout process itself dies, like when it receives a KILL signal for example.

** Build-related

  Programs now port to C23 platforms that strictly check types when
  qualifier-generic functions like strchr are used.

  'chcon' and 'runcon' stub binaries will be built on systems without
  libselinux, when configured using --with-selinux.

  'kill' and 'uptime' are no longer built by default.  These programs can be
  built with the --enable-install-program=kill,uptime configure option.

Source: Planet GNU