fcoreutils 0.10.0

High-performance GNU coreutils replacement with SIMD and parallelism
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
# fcoreutils

[![Test](https://github.com/AiBrush/fcoreutils/actions/workflows/test.yml/badge.svg)](https://github.com/AiBrush/fcoreutils/actions/workflows/test.yml)
[![Release](https://github.com/AiBrush/fcoreutils/actions/workflows/release.yml/badge.svg)](https://github.com/AiBrush/fcoreutils/actions/workflows/release.yml)
[![crates.io](https://img.shields.io/crates/v/fcoreutils?color=orange)](https://crates.io/crates/fcoreutils)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![GitHub Release](https://img.shields.io/github/v/release/AiBrush/fcoreutils)](https://github.com/AiBrush/fcoreutils/releases)

High-performance GNU coreutils replacement in Rust — 100+ tools, SIMD-accelerated, drop-in compatible, cross-platform.

## Independent Benchmarks (v0.9.2)

*Source: [AiBrush/coreutils-rs-independent-test](https://github.com/AiBrush/coreutils-rs-independent-test) — Linux x86_64, GitHub Actions, 100MB file, hyperfine*

**Summary:** 107 tools tracked · 1059/1209 tests passed (87.6%) · fastest: wc at 31.5x vs GNU

> Sizes are raw binary sizes. Compat is GNU test pass rate. Speedup is peak across all benchmark scenarios.
> `-` = no data collected yet for this tool/metric.

| Tool | fcoreutils size | GNU size | uutils size | Compat f\* vs GNU | Speedup f\* vs GNU | Speedup f\* vs uutils |
|------|----------------:|----------:|----------:|------------------:|-------------------:|----------------------:|
| arch | 425.8 KB | 34.5 KB | - | ✅ 100% | **0.8x** | - |
| b2sum | 633.9 KB | 54.5 KB | 2.3 MB | ✅ 100% | **1.3x** | **1.2x** |
| base32 | 445.0 KB | 38.5 KB | - | ✅ 100% | **1.5x** | - |
| base64 | 558.1 KB | 38.5 KB | 1.3 MB | ⚠️ 97% | **5.4x** | **5.5x** |
| basename | 430.6 KB | 34.5 KB | - | ✅ 100% | **0.8x** | - |
| basenc | 455.7 KB | 46.5 KB | - | ✅ 100% | **1.0x** | - |
| cat | 462.4 KB | 38.5 KB | 1.3 MB | ✅ 100% | **2.5x** | **1.6x** |
| chcon | - | - | - | - | - | - |
| chgrp | 524.0 KB | 58.5 KB | - | ✅ 100% | **0.9x** | - |
| chmod | 525.9 KB | 54.5 KB | - | ✅ 100% | **0.9x** | - |
| chown | 528.5 KB | 58.5 KB | - | ✅ 100% | **0.9x** | - |
| chroot | - | - | - | - | - | - |
| cksum | 443.2 KB | 102.5 KB | - | ✅ 100% | **1.2x** | - |
| comm | 456.6 KB | 38.5 KB | 1.3 MB | ✅ 100% | **3.3x** | **3.1x** |
| cp | 494.7 KB | 138.5 KB | - | ✅ 100% | **0.9x** | - |
| csplit | 1.8 MB | 50.5 KB | - | - | **16.9x** | - |
| cut | 635.1 KB | 38.5 KB | 1.3 MB | ✅ 100% | **5.5x** | **1.6x** |
| date | - | - | - | ✅ 100% | - | - |
| dd | 496.3 KB | 70.5 KB | - | ✅ 100% | **0.9x** | - |
| df | - | - | - | ⚠️ 24% | - | - |
| dir | - | - | - | - | - | - |
| dircolors | 451.2 KB | 46.5 KB | - | ⚠️ 86% | - | - |
| dirname | 427.5 KB | 34.4 KB | - | ✅ 100% | **0.8x** | - |
| du | - | - | - | ⚠️ 76% | - | - |
| echo | 427.2 KB | 34.4 KB | - | ✅ 100% | **0.8x** | - |
| env | 468.4 KB | 46.9 KB | - | ✅ 100% | **0.9x** | - |
| expand | 451.0 KB | 34.5 KB | 1.3 MB | ✅ 100% | **9.7x** | **2.7x** |
| expr | 1.8 MB | 42.4 KB | - | ✅ 100% | **0.8x** | - |
| factor | 453.0 KB | 62.5 KB | - | ✅ 100% | **0.9x** | - |
| false | 296.5 KB | 26.3 KB | - | ✅ 100% | - | - |
| fmt | - | - | - | ⚠️ 94% | - | - |
| fold | 449.7 KB | 34.5 KB | 1.3 MB | ✅ 100% | **4.5x** | **1.6x** |
| groups | 429.4 KB | 34.5 KB | - | ✅ 100% | **0.8x** | - |
| head | 458.2 KB | 42.5 KB | 1.3 MB | ✅ 100% | **1.6x** | **1.2x** |
| hostid | 425.7 KB | 34.5 KB | - | ✅ 100% | **0.9x** | - |
| id | 433.9 KB | 38.5 KB | - | ✅ 100% | **1.0x** | - |
| install | 513.5 KB | 142.5 KB | - | ✅ 100% | **1.0x** | - |
| join | 472.3 KB | 50.5 KB | 2.6 MB | ✅ 100% | **0.7x** | **0.8x** |
| kill | - | - | - | - | - | - |
| link | 431.5 KB | 34.5 KB | - | ✅ 100% | **0.9x** | - |
| ln | 452.5 KB | 54.5 KB | - | ✅ 100% | **0.9x** | - |
| logname | 425.7 KB | 34.5 KB | - | ✅ 100% | **0.8x** | - |
| ls | - | - | - | ✅ 100% | - | - |
| md5sum | 4.9 MB | 38.4 KB | 2.3 MB | ✅ 100% | **1.0x** | **1.3x** |
| mkdir | 443.0 KB | 74.5 KB | - | ✅ 100% | **1.0x** | - |
| mkfifo | 433.1 KB | 42.5 KB | - | ✅ 100% | **1.0x** | - |
| mknod | 435.3 KB | 42.5 KB | - | ✅ 100% | **1.0x** | - |
| mktemp | 444.8 KB | 34.5 KB | - | ✅ 100% | - | - |
| mv | 475.5 KB | 134.5 KB | - | - | **1.0x** | - |
| nice | 458.7 KB | 34.5 KB | - | ✅ 100% | **0.9x** | - |
| nl | 1.8 MB | 38.6 KB | 2.7 MB | ✅ 100% | **4.4x** | **1.6x** |
| nohup | 456.6 KB | 34.4 KB | - | ✅ 100% | **0.9x** | - |
| nproc | 445.0 KB | 34.5 KB | - | ✅ 100% | **0.8x** | - |
| numfmt | - | - | - | ✅ 100% | - | - |
| od | - | - | - | ⚠️ 97% | - | - |
| paste | 452.1 KB | 38.4 KB | 1.2 MB | ✅ 100% | **1.8x** | **13.9x** |
| pathchk | 437.7 KB | 34.5 KB | - | ✅ 100% | **0.8x** | - |
| pinky | - | - | - | ⚠️ 33% | - | - |
| pr | - | - | - | ⚠️ 63% | - | - |
| printenv | - | - | - | - | - | - |
| printf | - | - | - | ⚠️ 92% | - | - |
| ptx | - | - | - | ⚠️ 20% | - | - |
| pwd | 430.2 KB | 34.5 KB | - | ✅ 100% | - | - |
| readlink | 440.0 KB | 42.4 KB | - | ✅ 100% | **0.8x** | - |
| realpath | 444.4 KB | 42.4 KB | - | ✅ 100% | **0.8x** | - |
| rev | 442.7 KB | 14.4 KB | - | ✅ 100% | **21.6x** | - |
| rm | 523.2 KB | 58.5 KB | - | ✅ 100% | **0.9x** | - |
| rmdir | 432.0 KB | 46.4 KB | - | ⚠️ 83% | **0.9x** | - |
| runcon | - | - | - | - | - | - |
| seq | 491.0 KB | 50.5 KB | - | ✅ 100% | **16.7x** | - |
| sha1sum | 4.9 MB | 38.4 KB | - | ✅ 100% | **0.8x** | - |
| sha224sum | 4.9 MB | 38.4 KB | - | ✅ 100% | **0.9x** | - |
| sha256sum | 4.9 MB | 38.4 KB | 2.3 MB | ✅ 100% | **1.0x** | **1.0x** |
| sha384sum | 4.9 MB | 38.4 KB | - | ✅ 100% | **0.9x** | - |
| sha512sum | 4.9 MB | 38.4 KB | - | ✅ 100% | **0.9x** | - |
| shred | 456.0 KB | 54.5 KB | - | ✅ 100% | **2.0x** | - |
| shuf | 469.7 KB | 46.5 KB | - | ✅ 100% | - | - |
| sleep | 445.3 KB | 34.5 KB | - | ✅ 100% | **0.9x** | - |
| sort | 980.2 KB | 102.8 KB | 3.2 MB | ⚠️ 98% | **11.7x** | **13.2x** |
| split | 526.3 KB | 54.9 KB | - | ✅ 100% | **0.9x** | - |
| stat | - | - | - | ⚠️ 79% | - | - |
| stdbuf | - | - | - | ✅ 100% | - | - |
| stty | - | - | - | ⚠️ 57% | - | - |
| sum | 440.7 KB | 34.4 KB | - | ✅ 100% | **1.4x** | - |
| sync | 431.4 KB | 34.4 KB | - | ⚠️ 83% | **0.8x** | - |
| tac | 1.9 MB | 38.4 KB | 2.7 MB | ✅ 100% | **3.1x** | **1.7x** |
| tail | 485.8 KB | 62.5 KB | 1.7 MB | ✅ 100% | **1.4x** | **2.0x** |
| tee | 444.4 KB | 38.5 KB | - | ✅ 100% | - | - |
| test | 441.6 KB | 46.4 KB | - | ✅ 100% | - | - |
| timeout | 486.5 KB | 38.9 KB | - | ⚠️ 90% | - | - |
| touch | 457.4 KB | 94.5 KB | - | ⚠️ 95% | **0.9x** | - |
| tr | 696.2 KB | 46.5 KB | 1.3 MB | ✅ 100% | **6.5x** | **7.0x** |
| true | 296.1 KB | 26.3 KB | - | ✅ 100% | - | - |
| truncate | 442.1 KB | 38.5 KB | - | ✅ 100% | **0.9x** | - |
| tsort | 466.9 KB | 46.5 KB | - | ✅ 100% | - | - |
| tty | 426.7 KB | 34.5 KB | - | ✅ 100% | **0.8x** | - |
| uname | 429.6 KB | 34.5 KB | - | ✅ 100% | **0.8x** | - |
| unexpand | 454.5 KB | 38.5 KB | 1.3 MB | ✅ 100% | **4.1x** | **2.5x** |
| uniq | 907.0 KB | 38.5 KB | 1.3 MB | ✅ 100% | **10.6x** | **6.0x** |
| unlink | 430.4 KB | 34.5 KB | - | ✅ 100% | **0.9x** | - |
| uptime | 518.7 KB | 14.4 KB | - | ⚠️ 80% | - | - |
| users | - | - | - | ✅ 100% | - | - |
| vdir | - | - | - | - | - | - |
| wc | 904.8 KB | 54.5 KB | 1.4 MB | ⚠️ 97% | **31.5x** | **17.1x** |
| who | - | - | - | ⚠️ 73% | - | - |
| whoami | 425.9 KB | 34.5 KB | - | ✅ 100% | **0.8x** | - |
| yes | 425.2 KB | 34.4 KB | - | ⚠️ 17% | **4.1x** | - |

## All Tools

### Text Processing

| Tool | Binary | Description | Tests |
|------|--------|-------------|:-----:|
| wc | `fwc` | Word, line, char, byte count (SIMD SSE2, single-pass, parallel) | 71/73 ⚠️ |
| cut | `fcut` | Field/byte/char extraction (mmap, SIMD) | 49/49 ✅ |
| sort | `fsort` | Line sorting (parallel merge sort) | 50/51 ⚠️ |
| tr | `ftr` | Character translation (SIMD pshufb, AVX2/SSE2, parallel) | 46/46 ✅ |
| uniq | `funiq` | Filter duplicate lines (mmap, zero-copy, single-pass) | 46/46 ✅ |
| tac | `ftac` | Reverse file lines (parallel memchr, zero-copy writev, vmsplice) | 30/30 ✅ |
| head | `fhead` | Output first lines (zero-copy mmap, SIMD newline scan) | 47/47 ✅ |
| tail | `ftail` | Output last lines (reverse SIMD scan, follow mode) | 44/44 ✅ |
| cat | `fcat` | Concatenate files (zero-copy splice/sendfile, mmap) | 44/44 ✅ |
| rev | `frev` | Reverse lines character-by-character (mmap, SIMD) | 32/32 ✅ |
| expand | `fexpand` | Convert tabs to spaces (mmap, configurable tab stops) | 33/33 ✅ |
| unexpand | `funexpand` | Convert spaces to tabs (mmap, configurable tab stops) | 26/26 ✅ |
| fold | `ffold` | Wrap lines to specified width (mmap, byte/char modes) | 35/35 ✅ |
| paste | `fpaste` | Merge lines of files (mmap, serial/parallel modes) | 30/30 ✅ |
| nl | `fnl` | Number lines (mmap, section delimiters, regex) | 47/47 ✅ |
| comm | `fcomm` | Compare sorted files line by line (mmap, SIMD) | 30/30 ✅ |
| join | `fjoin` | Join lines on a common field (mmap) | 35/35 ✅ |

### Encoding/Decoding

| Tool | Binary | Description | Tests |
|------|--------|-------------|:-----:|
| base64 | `fbase64` | Base64 encode/decode (SIMD, parallel, fused strip+decode) | 32/33 ⚠️ |
| base32 | `fbase32` | RFC 4648 base32 encoding/decoding | 29/29 ✅ |
| basenc | `fbasenc` | Multi-format encoder/decoder (base64, base32, base16, base2, z85) | 40/40 ✅ |

### Checksums

| Tool | Binary | Description | Tests |
|------|--------|-------------|:-----:|
| sha256sum | `fsha256sum` | SHA-256 checksums (mmap, madvise, readahead, parallel) | 34/34 ✅ |
| md5sum | `fmd5sum` | MD5 checksums (mmap, batch I/O, parallel hash, batched output) | 30/30 ✅ |
| b2sum | `fb2sum` | BLAKE2b checksums (mmap, madvise, readahead) | 25/25 ✅ |
| sha1sum | `fsha1sum` | SHA-1 checksums | 15/15 ✅ |
| sha224sum | `fsha224sum` | SHA-224 checksums | 10/10 ✅ |
| sha384sum | `fsha384sum` | SHA-384 checksums | 10/10 ✅ |
| sha512sum | `fsha512sum` | SHA-512 checksums | 10/10 ✅ |
| sum | `fsum` | BSD/SysV checksums | 23/23 ✅ |
| cksum | `fcksum` | CRC-32 checksums | 21/21 ✅ |

### File Operations

| Tool | Binary | Description | Tests |
|------|--------|-------------|:-----:|
| cp | `fcp` | Copy files and directories | 18/18 ✅ |
| rm | `frm` | Remove files or directories | 12/12 ✅ |
| dd | `fdd` | Convert and copy files with block-level operations | 17/17 ✅ |
| split | `fsplit` | Split files into pieces | 20/20 ✅ |
| install | `finstall` | Copy files and set attributes | 11/11 ✅ |
| shred | `fshred` | Overwrite files to hide contents | 10/10 ✅ |
| ln | `fln` | Create hard and symbolic links | 16/16 ✅ |
| link | `flink` | Create hard link (low-level) | 8/8 ✅ |
| unlink | `funlink` | Remove file (low-level) | 7/7 ✅ |
| touch | `ftouch` | Change file timestamps | 21/21 ✅ |
| truncate | `ftruncate` | Shrink or extend file sizes | 25/25 ✅ |
| mkdir | `fmkdir` | Create directories (symbolic mode support) | 17/17 ✅ |
| rmdir | `frmdir` | Remove empty directories | 10/12 ⚠️ |
| mkfifo | `fmkfifo` | Create named pipes (FIFOs) | 11/11 ✅ |
| mknod | `fmknod` | Create special files | 10/10 ✅ |
| mktemp | `fmktemp` | Create temporary files/directories | 15/15 ✅ |

### Permissions

| Tool | Binary | Description | Tests |
|------|--------|-------------|:-----:|
| chmod | `fchmod` | Change file mode/permission bits | 33/33 ✅ |
| chown | `fchown` | Change file owner and group | 11/11 ✅ |
| chgrp | `fchgrp` | Change group ownership of files | 11/11 ✅ |

### Text/Data Generation

| Tool | Binary | Description | Tests |
|------|--------|-------------|:-----:|
| seq | `fseq` | Generate number sequences | 53/53 ✅ |
| shuf | `fshuf` | Random permutations of input | 27/27 ✅ |
| tsort | `ftsort` | Topological sorting | 19/19 ✅ |
| echo | `fecho` | Display a line of text | 38/38 ✅ |
| expr | `fexpr` | Evaluate expressions | 43/43 ✅ |
| factor | `ffactor` | Print prime factors of numbers | 26/26 ✅ |
| test | `ftest` | Check file types and compare values | 51/51 ✅ |
| numfmt | `fnumfmt` | Convert numbers to/from human-readable format | 27/27 ✅ |

### Path Utilities

| Tool | Binary | Description | Tests |
|------|--------|-------------|:-----:|
| basename | `fbasename` | Strip directory and suffix from paths | 26/26 ✅ |
| dirname | `fdirname` | Strip last path component | 23/23 ✅ |
| readlink | `freadlink` | Print symlink targets | 19/19 ✅ |
| realpath | `frealpath` | Resolve absolute paths | 24/24 ✅ |
| pathchk | `fpathchk` | Validate path names | 17/17 ✅ |
| pwd | `fpwd` | Print working directory | 8/8 ✅ |

### System Information

| Tool | Binary | Description | Tests |
|------|--------|-------------|:-----:|
| id | `fid` | Print user and group IDs | 16/16 ✅ |
| groups | `fgroups` | Print group memberships | 4/4 ✅ |
| whoami | `fwhoami` | Print effective user name | 4/4 ✅ |
| logname | `flogname` | Print login name | 3/3 ✅ |
| uname | `funame` | Print system information | 14/14 ✅ |
| uptime | `fuptime` | System uptime and load averages | 5/5 ✅ |
| arch | `farch` | Print machine architecture | 5/5 ✅ |
| hostid | `fhostid` | Print host identifier | 6/6 ✅ |
| tty | `ftty` | Print terminal name | 6/6 ✅ |
| nproc | `fnproc` | Print number of processors | 8/8 ✅ |
| users | `fusers` | Print logged-in user names | 8/8 ✅ |
| ls | `fls` | List directory contents | 39/39 ✅ |

### Process/Environment

| Tool | Binary | Description | Tests |
|------|--------|-------------|:-----:|
| printenv | `fprintenv` | Print environment variables | 5/5 ✅ |
| env | `fenv` | Run program with modified environment | 17/17 ✅ |
| timeout | `ftimeout` | Run command with time limit | 19/21 ⚠️ |
| nice | `fnice` | Run with modified scheduling priority | 12/12 ✅ |
| nohup | `fnohup` | Run immune to hangups | 6/6 ✅ |
| sleep | `fsleep` | Delay for specified time | 10/10 ✅ |
| sync | `fsync` | Flush filesystem caches | 5/6 ✅ |
| chroot | `fchroot` | Change root directory (requires root) | 11/11 ✅ |
| tee | `ftee` | Read stdin, write to stdout and files | 15/15 ✅ |
| yes | `fyes` | Output a string repeatedly | 23/23 ✅ |
| stdbuf | `fstdbuf` | Run command with modified I/O stream buffering | 6/6 ✅ |

### Shell Utilities

| Tool | Binary | Description | Tests |
|------|--------|-------------|:-----:|
| true | `ftrue` | Exit with status 0 | 8/8 ✅ |
| false | `ffalse` | Exit with status 1 | 7/7 ✅ |
| dircolors | `fdircolors` | Setup LS_COLORS environment variable | 12/14 ⚠️ |

### Tools with Known Issues

| Tool | Binary | Description | Tests | Issue Area |
|------|--------|-------------|:-----:|------------|
| stat | `fstat` | Display file or filesystem status | 23/29 ⚠️ | Format strings, terse output |
| date | `fdate` | Display or set the system date and time | 28/28 ✅ ||
| who | `fwho` | Show who is logged on | 11/15 ⚠️ | Boot time, runlevel |
| pinky | `fpinky` | Lightweight finger information | 3/9 ⚠️ | Long/short format output |
| df | `fdf` | Report filesystem disk space usage | 4/17 ⚠️ | Output formatting, type filtering |
| du | `fdu` | Estimate file space usage | 16/21 ⚠️ | Apparent size, byte blocks |
| od | `fod` | Octal dump of file contents | 34/35 ⚠️ | Float format |
| pr | `fpr` | Paginate or columnate files for printing | 12/19 ⚠️ | Multi-column, merge mode |
| printf | `fprintf` | Format and print data | 49/53 ⚠️ | Quoting, negative integers |
| fmt | `ffmt` | Simple text formatter (reflow paragraphs) | 17/18 ⚠️ | Wide line wrapping |
| ptx | `fptx` | Produce permuted index of file contents | 2/10 ⚠️ | Core output format |
| stty | `fstty` | Change and print terminal line settings | 4/7 ✅ | 3 skipped |

### Not Yet Tested

| Tool | Binary | Description |
|------|--------|-------------|
| mv | `fmv` | Move or rename files and directories |
| dir | `fdir` | List directory contents (like ls) |
| vdir | `fvdir` | List directory contents verbosely (like ls -l) |
| csplit | `fcsplit` | Split files based on context/patterns |
| runcon | `fruncon` | Run command with specified SELinux security context |
| chcon | `fchcon` | Change SELinux security context of files |

## Installation

```bash
cargo install fcoreutils
```

Or build from source:

```bash
git clone https://github.com/AiBrush/fcoreutils.git
cd fcoreutils
cargo build --release
```

Binaries are in `target/release/`.

## Usage

Each tool is prefixed with `f` to avoid conflicts with system utilities:

```bash
# Word count (drop-in replacement for wc)
fwc file.txt
fwc -l file.txt          # Line count only
fwc -w file.txt          # Word count only
fwc -c file.txt          # Byte count only (uses stat, instant)
fwc -m file.txt          # Character count (UTF-8 aware)
fwc -L file.txt          # Max line display width
cat file.txt | fwc       # Stdin support
fwc file1.txt file2.txt  # Multiple files with total

# Cut (drop-in replacement for cut)
fcut -d: -f2 file.csv    # Extract field 2 with : delimiter
fcut -d, -f1,3-5 data.csv  # Multiple fields
fcut -b1-20 file.txt     # Byte range selection

# Hash tools (drop-in replacements)
fsha256sum file.txt       # SHA-256 checksum
fmd5sum file.txt          # MD5 checksum
fb2sum file.txt           # BLAKE2b checksum
fsha256sum -c sums.txt    # Verify checksums

# Base64 encode/decode
fbase64 file.txt          # Encode to base64
fbase64 -d encoded.txt    # Decode from base64
fbase64 -w 0 file.txt     # No line wrapping

# Sort, translate, deduplicate, reverse
fsort file.txt            # Sort lines alphabetically
fsort -n file.txt         # Numeric sort
ftr 'a-z' 'A-Z' < file   # Translate lowercase to uppercase
ftr -d '[:space:]' < file # Delete whitespace
funiq file.txt            # Remove adjacent duplicates
funiq -c file.txt         # Count occurrences
ftac file.txt             # Print lines in reverse order

# File viewing and transformation
fhead -n 20 file.txt      # First 20 lines
ftail -n 20 file.txt      # Last 20 lines
ftail -f logfile.txt      # Follow file for new lines
fcat file1.txt file2.txt  # Concatenate files
fcat -n file.txt          # With line numbers
frev file.txt             # Reverse each line

# Text formatting
fexpand file.txt          # Convert tabs to spaces
funexpand file.txt        # Convert spaces to tabs
ffold -w 80 file.txt      # Wrap lines at 80 columns
fnl file.txt              # Number lines
fpaste file1 file2        # Merge files line by line
fpaste -s file.txt        # Serial mode (join all lines)

# Set operations on sorted files
fcomm file1 file2         # Compare two sorted files
fcomm -12 file1 file2     # Only lines common to both
fjoin file1 file2         # Join on common field
fjoin -t, -1 2 -2 1 a b  # Join CSV files on specific fields
```

## Key Optimizations

- **Zero-copy mmap**: Large files are memory-mapped directly, avoiding copies
- **SIMD scanning**: `memchr` crate auto-detects AVX2/SSE2/NEON for byte searches
- **stat-only byte counting**: `wc -c` uses `stat()` without reading file content
- **Hardware-accelerated hashing**: sha2 detects SHA-NI, blake2 uses optimized implementations
- **SIMD base64**: Vectorized encode/decode with 4MB chunked streaming
- **Parallel processing**: Multi-file hashing and wc use thread pools
- **SIMD range translate/delete**: `tr` detects contiguous byte ranges and uses AVX2/SSE2 SIMD
- **Chunk-based reverse scan**: `tac` processes backward in 512KB chunks with forward SIMD within each chunk
- **Optimized release profile**: Fat LTO, single codegen unit, abort on panic, stripped binaries

## GNU Compatibility

Output is byte-identical to GNU coreutils. All flags are supported including `--files0-from`, `--total`, `--complement`, `--check`, and correct column alignment.

## Assembly Optimization Path

We are pursuing a second optimization track alongside Rust: hand-crafted x86_64 assembly for platforms where maximum throughput matters. We started with `yes` — it is simple enough to implement completely and serves as a proof-of-concept for the approach.

Our assembly `yes` achieves **~2.6 GB/s** (1.89x faster than GNU yes, 1.25x faster than our Rust implementation) while compiling to under 1,300 bytes with no runtime dependencies.

| Binary         | Size          | Throughput  | Memory (RSS) | Startup  |
|----------------|---------------|-------------|--------------|----------|
| fyes (asm)     | 1,701 bytes   | 2,060 MB/s  | 28 KB        | 0.24 ms  |
| GNU yes (C)    | 43,432 bytes  | 2,189 MB/s  | 1,956 KB     | 0.75 ms  |
| fyes (Rust)    | ~435 KB       | ~2,190 MB/s | ~2,000 KB    | ~0.75 ms |

Benchmarked on Linux x86_64. At pipe-limited throughput all three write at ~2.1 GB/s.
The assembly wins on binary size (25x smaller), memory (70x less RSS), and startup latency (3x faster).

On **Linux x86_64** and **Linux ARM64**, releases ship the assembly binary. All other platforms (macOS, Windows) use the Rust implementation. The assembly binary is a static ELF with only two syscalls (`write` and `exit`/`exit_group`), no dynamic linker, and a non-executable stack.

Our priority remains **100% GNU compatibility in Rust first**. We will pursue assembly implementations for additional commands over time, as the tooling and verification process matures. The goal is not to rush assembly ports but to do them right — with full security review and byte-for-byte compatibility testing.

See [`assembly/yes/`](assembly/yes/) for the source and [`tests/assembly/`](tests/assembly/) for the test suite.

## Roadmap

We are actively working toward **100% compatibility** with GNU coreutils — byte-identical output, same exit codes, and matching error messages for all 90+ tools. Once we achieve full compatibility, we will focus on **performance optimization** targeting 10-30x speedup over GNU coreutils across all tools.

## Contributing

We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.

This project follows the [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md).

## Architecture

See [ARCHITECTURE.md](ARCHITECTURE.md) for design decisions and [PROGRESS.md](PROGRESS.md) for development status.

## Security

To report a vulnerability, please see our [Security Policy](SECURITY.md).

## License

MIT