This is to announce coreutils-9.8, a stable release. Major new features include: - SHA3 hashing with `cksum -a sha3` - nproc now honors Linux cgroup v2 configured CPU quotas - fold is now multi-byte character aware - Base58 encoding with `basenc --base58` - stty can set arbitrary baud rates on supported systems
There have also been many bug fixes and other changes as summarized in the NEWS below. There have been 348 commits by 8 people in the 24 weeks since 9.7. Thanks to everyone who has contributed! The following people contributed changes to this release: Bernhard Voelker (1) H. Peter Anvin (4) Bruno Haible (8) Harry Fellowes (1) Collin Funk (61) Paul Eggert (179) Grisha Levit (1) Padraig Brady (93) 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.8.tar.gz (15MB) https://ftp.gnu.org/gnu/coreutils/coreutils-9.8.tar.xz (6.0MB) Here are the GPG detached signatures: https://ftp.gnu.org/gnu/coreutils/coreutils-9.8.tar.gz.sig https://ftp.gnu.org/gnu/coreutils/coreutils-9.8.tar.xz.sig Use a mirror for higher download bandwidth: https://www.gnu.org/order/ftp.html Here are the SHA1 and SHA256 checksums: File: coreutils-9.8.tar.gz SHA1 sum: 058b9777cfc78abc4d8893e74ebddfdb344076a9 SHA256 sum: 1be88d53f694671cf7fb85e7723dbd1de9131d031880161b452a0685b986296e File: coreutils-9.8.tar.xz SHA1 sum: a6a58e00688fe0705a7051b36592f1e43e89a9ef SHA256 sum: e6d4fd2d852c9141a1c2a18a13d146a0cd7e45195f72293a4e4c044ec6ccca15 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.8.tar.gz.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 <pixelb...@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.8.tar.gz.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 76e161dc2d70f2d3e0b908e756d62be91bb72c41 tagged as v9.8. For a summary of changes and contributors, see: https://gitweb.git.savannah.gnu.org/gitweb/?p=coreutils.git;a=shortlog;h=v9.8 or run this command from a git-cloned coreutils directory: git shortlog v9.7..v9.8 This release was bootstrapped with the following tools: Autoconf 2.72.70-9ff9 Automake 1.17 Gnulib 2025-09-22 4e944641037342d36f31547bec6a73ca910d5bd9 Bison 3.8.2 NEWS * Noteworthy changes in release 9.8 (2025-09-22) [stable] ** Bug fixes 'b2sum' will diagnose --length values that are too big. Previously it would have silently assumed 512 for any larger values. [bug introduced in coreutils-9.6] 'base32' and 'base64' when decoding will again diagnose partially padded data that ends with a newline. [bug introduced in coreutils-9.5] 'basenc -d -i' will now strip '=' characters from the input in encodings where padding characters are not valid. [bug introduced with the basenc program in coreutils-8.31] 'cp -p' had spurious "Operation not supported" failures when copying to non-NFS files from NFSv4 files with trivial ACLs. [bug introduced in coreutils-9.6] 'cp --sparse=always' missed some opportunities to create holes. That is, although the copies had the correct data, sometimes data zeros used extents rather than holes. [This bug was present in "the beginning".] cp missed opportunities to create holes when copying from file systems like squashfs that support SEEK_HOLE only trivially. [bug introduced in coreutils-9.0] cp, install, and mv now avoid possible data corruption on glibc 2.41 and 2.42 systems when copy_file_range is used with ranges > 2GiB, avoiding https://sourceware.org/PR33245 [bug triggered since coreutils-9.0] 'date' supports specifying multiple named formats with the last taking precedence. Previously multiple specifications would induce an error. [bug introduced in coreutils-5.90] 'dd oflag=seek_bytes' no longer mistakenly reports errors when the output file exists on GNU/Hurd. [bug introduced in coreutils-8.16] 'fold' no longer exhausts memory when processing large inputs with a very large --width argument. [This bug was present in "the beginning".] 'install -d' now produces the correct diagnostic upon failure to create a directory. Previously it would have produced a confusing error about changing permissions. [This bug was present in "the beginning".] "ls --size --block-size=\'k" could misalign output in locales with multi-byte thousands grouping characters. [This bug was present in "the beginning".] 'nohup' avoids implementation defined behavior setting umask, avoiding a FORTIFY runtime failure on Bionic libc. [This bug was present in "the beginning".] 'od --strings' with '-N' now works correctly. Previously od might write a NUL byte after a heap buffer, or output invalid addresses. [These bugs were present in "the beginning".] 'od -w0' will now issue a diagnostic and exit gracefully. Previously it would have aborted. [bug introduced in coreutils-9.3] 'od -w' no longer silently mishandles enormous widths like 3037000500. Instead, it either outputs correctly or diagnoses a too-large width. [This bug was present in "the beginning".] 'od +N.' (where N is a decimal number) works again as per POSIX. [bug introduced in textutils-2.0] 'od /dev/null ++0' no longer mistakenly treats the ++0 as an offset. [This bug was present in "the beginning".] 'sort' with key character offsets of SIZE_MAX, could induce a read of 1 byte before an allocated heap buffer. For example: 'sort +0.18446744073709551615R input' on 64 bit systems. [bug introduced in coreutils-7.2] stdbuf now works on AIX. Previously it would have been ineffective. [bug introduced with the stdbuf program in coreutils-7.5] 'tail -n NUM' no longer can output more than NUM lines if stdin is a largish regular file with a nonzero initial offset, and grows while 'tail' is reading it. [This bug was present in "the beginning".] 'tail -f -n +NUM' no longer mishandles NUM values >= UINTMAX_MAX when the input is seekable. [bug introduced in coreutils-9.6] 'tail --pid' avoids some unlikely races if the kernel reuses PIDs. [bug introduced in coreutils-9.5] 'tty' now exits with status 4 with a special diagnostic if ttyname fails even though standard input is a tty. Formerly it quietly pretended that standard input was not a tty. [This bug was present in "the beginning".] ** New Features basenc supports the --base58 option to encode and decode the visually unambiguous Base58 encoding. 'cksum -a' now supports the 'sha3' argument, to use the SHA3-224, SHA3-256, SHA3-384, SHA3-512 message digest algorithms depending on the argument passed to the required --length (-l) option. 'cksum -a' now supports the 'sha2' argument, as a more consistent interface than the existing 'sha224', 'sha256', 'sha384', 'sha512' arguments, which are now selected with the --length (-l) option. 'date' now outputs dates in the country's native calendar for the Iranian locale (fa_IR) and for the Ethiopian locale (am_ET), and also does so more consistently for the Thailand locale (th_TH.UTF-8). fold now supports multi-byte characters, honoring their column width. Also the --characters (-c) option was added to wrap at a certain number of characters, similarly to --bytes in uni-byte locales. nproc now honors any cgroup v2 configured CPU quotas, which may reduce the effective number of processors available. stty supports setting arbitrary baud rates on supported systems, like Hurd, Linux with glibc >= 2.42, and some BSDs. Also on other systems the full set of supported baud rates is determined at build time if possible. Commands that support hardware acceleration like cksum and wc can now disable this acceleration at runtime through the commonly used GLIBC_TUNABLES environment variable. For example to disable the use of AVX512 instructions in cksum, you can: export GLIBC_TUNABLES='glibc.cpu.hwcaps=-AVX512F' ** Changes to conform better to POSIX.1-2024 readlink now defaults to being verbose if the POSIXLY_CORRECT environment variable is set. realpath now supports -E, which specifies the default behavior. The corresponding long option is --canonicalize. tsort now accepts and ignores -w. ** Improvements 'factor' is now much faster at identifying large prime numbers, and significantly faster on composite numbers greater than 2^128. fold now exits immediately upon receiving a write error, which is significant when reading large / unbounded inputs. 'seq' is more accurate with large integer start values. Previously 'seq 18446744073709551617 inf | head -n1' would output the number before the user specified start value. ** Build-related cksum was not compilable by Apple LLVM 10.0.0 x86-64, which lacks support for checking for the VPCLMULQDQ instruction. [bug introduced in coreutils-9.6] - Also posted at https://savannah.gnu.org/news/?id=10816