Version 0.9.0 - POSIX conformance achieved #691
jgarzik
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
posixutils-rs v0.9.0
Depth over breadth: a POSIX.1-2024 conformance pass across the tree
1,009 commits (70 PRs) since v0.8.0 (2026-06-25); 817 files changed,
+178,348 / −66,622.
Nearly every utility touched this cycle was audited against POSIX.1-2024
clause by clause, and the findings fixed. The C compiler alone accounts for a
third of the commits.
Highlights
pccis nowc17— the C compiler driver ships under the name of theone language it compiles. Dialect switching is gone;
-std=remains only asa compatibility shim.
makebuilds real Makefiles — VPATH, built-in inference rules,%pattern rules,
$(eval), the macro function set, conditionals anddefine/endef.paxspeakstarandcpio— both command lines route into pax.manrenders pages real systems ship — the pest grammar is gone,replaced by a roff/mdoc interpreter with
tbltext blocks, man-db configsupport and in-process decompression.
sh,tr,diff,echo,expr,pax,i18nandplibcarry file and argument data as bytes, so a non-UTF-8filename or
IFS=éno longer aborts anything.C compiler (
c17,cflow,ctags,cxref)pcc→c17; compiles exactly one language, C17.MEMORY-class aggregates, stacked-argument placement and alignment,
__int128andbinary128pairs, Darwin variadic aggregates, and theregister tally a fixed parameter actually spends.
__float128(IEEE binary128),_Float16,_Generic,__attribute__((mode)),transparent_union,vector_size,computed
goto, case ranges, designated-initializer ranges, GNU?:,__real__/__imag__,#pragma pack,_Atomicoperators that are actuallyatomic.
__builtin_va_arg_pack,__builtin_object_size, the fortified_chkentry points, theffs/clrsbfamily, and a working
<tgmath.h>,<stdint.h>and<stdatomic.h>.__VA_OPT__,-dM,-P,-include, the-Mdependencyfamily,
#include_next, include-guard detection, a correct macro hide set,and
-Eoutput that keeps its source lines.-fPICselects aposition-independent model.
-gnow emits line information a debugger can use, plus DWARFdescriptions of functions and their variables.
expression's own format.
are now rejected, and diagnostic message bodies are translatable.
cflowanalyzes object files, assembler source, and lex/yacc input;ctags/cxrefoutput formats corrected.-O0and-O2.Shell (
sh)bg/fg, blockingwaitpid, status retentionuntil
waitcollects it, and refusal offg/bgin a subshell.test/[sharing one evaluator with the utility,pwd,true,false,cd -e, a conformingulimit,umask,unalias,fc.$-,$!,errexit, and-or short-circuiting,subshell traps, and command-substitution status.
descriptor leaks.
Editors (
vi,ex,ed)vi::map/:unmap/:ab/:unawith shortest-match lookup, a tag stack(
:tag,^],^T), autoindent with spec-correct^D, abbreviations, andkey input driven through a real terminal queue.
vi: undo recorded for every buffer-changing command; motions classified sooperators act on the right region; character and display-column counting
where bytes were counted; buffer preserved on hangup.
ex: address resolution rebuilt (separators, marks, line 0, excessaddresses), POSIX write and join rules, real substitute flags and
replacement escapes,
+commandand argument lists.ed: mark tracking across structural edits, one substitute per undo,wqparsing,
noutput format.Build tools (
make,lex,yacc,nm,strip,ar)make: VPATH and thevpathdirective, built-in inference rules,%pattern rules,
$(eval), macro functions, conditionals,define/endef,overrideranking,.SCCS_GETretrieval, PROJECTDIR search,-pdatabasedump in makefile syntax, and a ledger-based build state. The rowan CST was
replaced by a line scanner.
lex: equivalence classes derived from the NFA, per-start-condition entrystates,
^resolved by automaton rather than post-match filter, REJECThistory, bracket-expression conformance,
YY_INPUT.yacc: LALR closure termination, non-productive non-terminal rejection,precedence from the last terminal,
$nresolution in mid-rule actions,yytnamein internal symbol order,$undefined.nm/strip: filter interaction, section symbols, long archive member names.Archives and file transfer (
pax,compress)tarandcpiofront-ends.path=records for oversized names, non-UTF-8 pathnamesunder
-o invalid=binary,-okeyword options when listing, time keywords.-ssubstitution,-uper member, hard-link contents in cpio,multi-volume
ustarprefixes, and attribute restoration on copy.compresspreserves mtime at nanosecond resolution and pre-1970 timestamps.Text utilities
diff:-c/-ubuilt from grouped sections, byte comparison, directorydifferences in the exit status.
patch: reads context diffs the waydiffwrites them, refuses absoluteand parent-directory names, detects format over the whole patch, recognizes
mailed headers.
tr: locale-driven case conversion and class membership,-cvs-C,equivalence classes, the string2 class rules.
od: float rendering as shortest-round-trip%gin aligned columns,-t fsize letters, long double conversion, block-group duplicate suppression,
-Nas a byte count.printf: XBD Ch. 5 precision and flag rules,%n$numbered conversions,unsigned conversions that saturate, incremental writes.
more: streaming input, cell-based measurement, LINES/COLUMNS on resize,and a PTY test harness.
split,csplit,strings,uniq,pr,expr,echo,find,du,getconf: conformance and diagnostic fixes throughout.Other utilities
mailx: one command table in place of three interpreters, mailbox locking,mbox that reads back, blind recipients, terminal-derived screenfuls.
talk/talkd: the local transport works at all now; terminfo-drivendrawing, BSD address precedence, signal-safe teardown, end-to-end tests.
sccs(ten utilities): one shared implementation of each rule, s-fileprotection enforcement,
deltaby minimal diff (and on binaries),-i/-xSID lists, z-file locking with registered cleanup.
cron/crontab/at/batch:CRON_ALLOW/CRON_DENYgating, signalhandlers installed before forking,
$SHELLas the job interpreter, editspreserved on editor failure.
bc: pest grammar replaced by a hand-written lexer and parser; scale-correctdivision,
sqrtand modulus; POSIX dynamic scoping; streamed, column-wrappedoutput.
m4: GNU differential gate, lazy-sline directives matching GNU byte forbyte,
ifelsewarning parity.man: see Highlights; also-M,-S,-k/-fnative NAME search,architecture subdirectories,
.sorestricted to manual roots, recursionbounds throughout the roff interpreter.
Internationalization
gettext-rsloads real message catalogs, honoringNLSPATH, withpositional-argument and plural formatting.
plib::diag/io_error_text, sono utility leaks Rust's
Displayor(os error N).plib.Library and infrastructure
plib: byte-oriented regex and collation,plib::tmp(replacingtempfileand retiring
rustix),plib::ttywith the terminal-write TOCTOU closed,a descriptor guard, close-on-exec temporaries, and
strerror-faithfulerror text.
release builds.
open items;
cflow,ctags,cxref,echo,printf,talk,talkd,trandcsplitwere promoted to Stage 6 (Audited).Security-relevant fixes
paxextracts fd-relative;patchrefuses absolute and parent-directorypaths.
gettext-rsbounds catalog allocation taken from an untrusted header.cron/lpguard environment overrides against set-gid, not only set-uid.logged.
man/roff,m4,bc,makeandlex.Contributors
Jeff Garzik, grisenti
This discussion was created from the release Version 0.9.0 - POSIX conformance achieved.
All reactions