Skip to content

docs: add release announcement for the 4.6.0 suite to NEWS - #3288

Open
andylemin wants to merge 4 commits into
mainfrom
release-announcement-4.6.0
Open

docs: add release announcement for the 4.6.0 suite to NEWS#3288
andylemin wants to merge 4 commits into
mainfrom
release-announcement-4.6.0

Conversation

@andylemin

@andylemin andylemin commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

What this adds

A public release announcement at the top of NEWS.md, ahead of the itemized 4.6.0 changelog, covering the coordinated release of Netatalk 4.6.0, Netatalk Client 1.0, and the new netatalk.io website.

The announcement is written for a general audience and groups work into themes:

  • Server performance: transport quantum/alignment work, cache defaults (ARC, resource-fork data cache, full-size dircache), hot-path syscall elimination, lock-free background cache maintenance
  • Strictly coherent caching and the locking/delete-semantics overhaul
  • Multi-protocol coexistence with Samba behind a single configuration switch, guarded by the end-to-end interop test
  • Feature complete Spotlight (Finder search) served from the CNID database by default
  • CNID backend modernisation: SQLite default, MySQL/MariaDB first class, dbd deprecated, robust error classification and exhaustion recovery
  • Security hardening across the cycle, plus the CI/testing infrastructure that gates regressions
  • Netatalk Client 1.0: its evolution from alpha/beta to the official production client, and what it ships
  • The new netatalk.io website

Coordination

  • Intended to merge in sync with the corresponding netatalk.io website update PR for the launch.
  • The itemized "Changes in 4.6.0" section below the announcement will be rebased/completed as the remaining PRs merge over the coming week.

Review points

  • "macOS Golden Gate" naming for the AFP-withdrawal framing
  • "Netatalk Client 1.0" as the production version designation

@andylemin
andylemin requested a review from a team September 4, 2026 06:49
@andylemin
andylemin requested a review from rdmark as a code owner September 4, 2026 06:49
@andylemin

Copy link
Copy Markdown
Contributor Author

@rdmark Ready for your editing pass.. a bunch of stuff that should probably be trimmed, and I suspect missing some things?

Introduce the public announcement for the coordinated release of
Netatalk 4.6.0, Netatalk Client 1.0, and the new netatalk.io website,
ahead of the itemized 4.6.0 changelog section.

The narrative groups the release cycle's changes into themes for a
general audience: server performance, strict cache coherency and the
locking overhaul, multi-protocol coexistence with Samba, feature
complete Spotlight search, the move to SQL CNID backends, security
hardening, the client's graduation to production status, and the new
website.
@andylemin
andylemin force-pushed the release-announcement-4.6.0 branch from 2c611b1 to 517eaa9 Compare September 4, 2026 13:14
Remove the suite-overview section that duplicated the opening paragraph,
drop filler openers, and lead each section with its facts. All figures
and claims are unchanged.
@andylemin
andylemin force-pushed the release-announcement-4.6.0 branch from 1be7f9f to 627e56d Compare September 4, 2026 13:43
@rdmark

rdmark commented Sep 4, 2026

Copy link
Copy Markdown
Member

@andylemin this is a nice write-up, I think most items are covered, but I'll go through the commit log

is your idea to have a write-up like this in NEWS.md for every release, or is this a special one-off? up until now I've been writing release notes like this in the body of the GitHub releases, but I see a value in keeping a copy of our release notes under revision control as well.

the NEWS.md file is already massively large, accumulated contents since 1992 ;)

Comment thread NEWS.md Outdated
Comment thread NEWS.md Outdated
Comment thread NEWS.md Outdated
Comment thread NEWS.md Outdated
Comment thread NEWS.md Outdated
with server signature verification and authenticated session binding.
* **Compatibility across the whole AFP timeline**: AFP 2.x servers, Mac
OS X file sharing, Time Capsules, Netatalk 4, AFP 3.4 — with Zeroconf
discovery, full UTF-8, and classic Mac code pages.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the only classic codepage supported right now is MacRoman, but porting over the others that Netatalk already supports will be trivial :)

@andylemin andylemin Sep 5, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will actually be very important.. For AFP3 clients Netatalk supports setting today;

mac charset = UTF8-MAC  # NFD (Normalization Form Canonical Decomposition - decomposed)
unix charset = UTF8     # NFC (Normalization Form Canonical Composition - composed)
vol charset = UTF8      # NFC (Normalization Form Canonical Composition - composed)

https://netatalk.io/manual/en/afp.conf.5#charset-options

This is better than the default (MAC_ROMAN) as conversion of UTF8 to/from UTF8-MAC is faster than the conversion to/from MAC_ROMAN (Ie, it only requires composition conversion rather than a full charset table conversion).
And UTF-8 supports modern language characters. So we definitely want Netatalk-client to speak UTF8-MAC.

Going forward; in the AFP4 / AFP-POSIX draft spec I have added native client support for UTF-8 to align with AFPS etc which allows for charset to be "passthrough" end to end (disk-to-wire-to-disk).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking of the other regional language charsets primarily -- MacGreek, MacHebrew, MacCyrillic and so on

what you point out is arguably even more important

Comment thread NEWS.md Outdated
Comment thread NEWS.md Outdated
Mention NAS devices, correct the client project's age to two years, name
Zeroconf service discovery, add legacy Classic Mac OS authentication,
scope code page support to MacRoman, cite kio-afp as a libafpsl consumer,
and extend the multi-protocol section to NFS and local accessors.
@andylemin
andylemin force-pushed the release-announcement-4.6.0 branch from c3ae610 to 43acc8b Compare September 5, 2026 05:08
@andylemin

Copy link
Copy Markdown
Contributor Author

@rdmark All changes done. Let me know if there is anything else? Feel free to pull this PR and edit as you see fit.

is your idea to have a write-up like this in NEWS.md for every release, or is this a special one-off?

My thinking was just that NEWS.md is on the home page of the website. We should add the same text to the Release notes on github as well so its shown there too?
I don't think we need this every time, however it is nicer to consume than the changelog so maybe we should consider it?

the NEWS.md file is already massively large, accumulated contents since 1992 ;)

I don't see an issue with the length, it's the provenance trail..

@rdmark rdmark left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is great!

one fast follow (mostly note to self) is that we need to "port" the v4.5.1, v4.5.2 changelogs over to main

https://github.com/Netatalk/netatalk/blob/branch-netatalk-4-5/NEWS.md

Serving AFP was already possible almost anywhere; mounting it was
effectively Apple-only. Lead with that constraint being removed rather
than mere continuity.
@sonarqubecloud

sonarqubecloud Bot commented Sep 9, 2026

Copy link
Copy Markdown

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

📊 Performance Dashboard

Commit: 8b70d1871eb9a4b114d107ddef0e7943f19c7073

🔥 Spectest (AFP 3.4) - FlameGraph

Netatalk Code-time: 2.3% · Runtime: 62s · Stacks: 1052

🔥 Click the preview to open the interactive flamegraph (zoom + search).

Flamegraph preview

🔝 Top 10 leaf functions
Function Samples
[libsqlite3.so.3.53.4] 244762770
_raw_spin_unlock_irqrestore 195148695
do_syscall_64 180815740
__cp_end 91510405
copy_folio_from_iter_atomic 57331820
x64_sys_call 54024215
srso_alias_safe_ret 49614075
afpd 42998865
generic_perform_write 31973515
perf_syscall_enter 28665910

📈 Speedtest (AFP 3.4) - PerfGraph

Speedtest throughput

Peak Read: 8350 MB/s (+12.0% vs hist avg 7454.5 MB/s; min 6219 / max 9526 over 30 PRs)
Peak Write: 279 MB/s (-75.6% vs hist avg 1143.4 MB/s; min 239 / max 1933 over 30 PRs)

🔝 Throughputs per operation (vs. historical average)
Metric Current (MB/s) Cur Avg Δ% Hist avg Hist min Hist max
Read peak mean 8350 +12.0% 7454.5 6219 9526
Read avg mean 4815 +12.4% 4283 3529 5411
Read avg max 5416 +14.1% 4747.2 3955 6013
Write peak mean 279 -75.6% 1143.4 239 1933
Write avg mean 151 -61.3% 390.2 96 588
Write avg max 367 -46.7% 689.2 187 989
Copy peak mean 2902 +7.1% 2709 2318 3333
Copy avg mean 1693 +5.6% 1603.1 1361 1977
Copy avg max 1920 +8.7% 1766.3 1559 2155
ServerCopy peak mean 3984 +6.4% 3745.5 3134 5334
ServerCopy avg mean 2052 +3.8% 1976.9 1679 2533
ServerCopy avg max 2204 +7.4% 2052.7 1757 2676

⏱️ Lantest (AFP 3.4) - LatencyGraph

Lantest latency

Avg total runtime: 4507 ms (+23.9% vs hist avg 3638.9 ms; min 2122 / max 4529 over 30 PRs)
Avg time per AFP op: 90 µs (+22.8% vs hist avg 73.3 µs; min 43 / max 91 over 30 PRs)

🐢 All operations (avg runtime, in test order, vs. historical average)
Metric Current (ms) Cur Avg Δ% Adj Δ% Hist avg Hist min Hist max
Writing one large file 40 +10.0% 36.4 25 47
Reading one large file 15 +0.4% 14.9 9 23
Creating 2000 files 515 +25.1% +0.0% 411.7 207 513
Create 2000 dirs tree (20×9×10) 505 +16.1% -9.0% 434.9 256 510
Open, write 1024 bytes, close 2000 files 422 +26.7% +1.6% 333.1 195 435
Open, read 1024 bytes, close 2000 files 370 +26.8% +1.7% 291.7 172 383
Copying 1000 files client-side (R+W) 596 +24.7% -0.4% 477.9 265 604
Copying 2000 files server-side 505 +23.4% -1.7% 409.3 182 512
Stat (lookup+getparams) 2000 files 257 +29.5% +4.4% 198.4 123 263
Enumerate dir with 2000 files 12 +21.6% -3.5% 9.87 5 13
Lock then unlock 2000 open forks 185 +21.7% -3.4% 152 105 192
Deleting 2000 files 333 +24.0% -1.1% 268.5 121 345
Byte-range lock/unlock 2000 ranges in one fork 188 +22.5% -2.6% 153.5 106 191
Directory cache hits (20 dirs x 100 files) 113 +27.1% +2.0% 88.9 57 115
Mixed cache operations (create/stat/enum/delete) on 500 files 224 +25.7% +0.6% 178.2 87 224
Deep path traversal (20 levels x 100 walks) 120 +27.3% +2.2% 94.3 58 123
Cache validation (500 files x 4 lookups) 107 +25.4% +0.3% 85.3 56 112

Run baseline: median op-test delta +25.1%, MAD 1.7%. Adj Δ% shifts each delta by the median; standouts ≥5% in bold. A large MAD means the run did not move uniformly — read the adjusted column with caution.

Performance trend

Comment thread NEWS.md

This cycle closed more than twenty CVEs, hardened every authentication
method (DHX, DHX2, SRP), tightened wire-format parsing throughout, and
added an unprivileged single-user mode. Even the classic AppleTalk

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's looking more and more like we won't do the single-user mode in this release, so let's remove this phrase

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants