AMule 3.0.0 – The "Alive Again" Version

rickcarlino1 pts0 comments

aMule 3.0.0 | aMule

Skip to main content<br>Release name: The 'alive again' version

First major release in 5+ years (since 2.3.3, 2021-02-07). Headline changes are dramatic throughput improvements, full build-system overhaul, modernized dependency stack, native binaries for Linux / macOS / Windows, and a broad legacy-API cleanup.

Highlights​

Throughput rewrite. Disk I/O moved off the main thread, ASIO/EPOLLET races fixed, throttlers replaced with proper token-bucket limiters. Peer-to-peer download on the same hardware sees ~100–380× speedups across macOS / Linux / Windows over 2.3.3, plus aMule 3.0.0 sustains ~4.8× the upload throughput of eMule 0.70b on Windows. See Performance for the full matrix and per-PR breakdown.

Both throttlers (MaxUpload, MaxDownload) were also broken pre-fix — MaxUpload=0 capped at "current rate + 5 KB/s", MaxDownload was a ratio controller rather than a literal cap. Both rewritten (#461, #491). Important user-facing bug fixes, but secondary to the headline numbers.

Big-library / big-shareset scaling. Follow-up wave targeting nodes with 100 k+ shared files: per-file EC payload caches (#725, #736), skip-unchanged EC updates (#727), local-peer ZLIB bypass (#728), and a string of O(N²) → O(N log N) / O(1) algorithmic fixes across SharedFileList, SharedFilesCtrl, KnownFileList, wxListCtrl, ExternalConn, and amuleweb — the WebUI / amulegui stay responsive even on libraries where the previous GUI took minutes to redraw.

CMake replaces autotools. Single build system, modern toolchain — minimum CMake 3.10, minimum wxWidgets 3.2.0.

Native binaries for every major desktop. AppImage (x86_64 + aarch64), Flatpak (x86_64 + aarch64), macOS Universal2 .dmg (now bundling aMuleGUI.app alongside aMule.app, #529), Windows portable .zip and NSIS installer (x64 + ARM64, #740). First-run desktop integration prompt for AppImage; cross-platform autostart-on-login toggle (#744).

Auto-rescan of shared folders. wxFileSystemWatcher-driven (#591), with recursive vs explicit-share intent split (#606) and coverage of Incoming + per-category Incoming dirs (#743).

HTTPS works again. CHTTPDownloadThread rewritten on top of wxWebRequest; the hand-rolled stack had silently stopped working against modern TLS.

Kad parallel searches with alpha-frontier widening.

MaxMindDB replaces deprecated GeoIP for IP→country.

Performance​

Throughput work landed across April 2026. The bottom-line cross-platform<br>numbers first, then the per-PR contributions that produced them.

Cross-platform end-to-end (2.3.3 vs 3.0.0)​

Leecher platform2.3.3 (sustained)3.0.0 (sustained)SpeedupmacOS (Apple Silicon, Mac Studio)0.35 MB/s135 MB/s 381× Linux ARM (UTM VM, Ubuntu 25.10)0.34 MB/s117 MB/s 345× Windows ARM (UTM VM, Windows 11)0.36 MB/s39 MB/s 107×<br>Sustained over a 90 s window, single LAN peer downloading a 30 GB file<br>from an x86_64 Linux seeder running the same aMule version under test.

Per-platform breakdown of the seeder-side vs leecher-side contributions:

Platform2.3.3+ seeder fix+ leecher fix (3.0.0)macOS0.35 MB/s30 MB/s135 MB/s Linux0.34 MB/s20 MB/s117 MB/s Windows0.36 MB/s6.8 MB/s39 MB/s<br>The seeder-side contribution (PR #451 CUploadDiskIOThread + ASIO fixes)<br>dominates everywhere; the leecher-side contribution (#454 partfile-write<br>offload + #484 throttler-wake fix + #491 token-bucket cap) stacks another<br>~4–6× on top.

vs eMule 0.70b (Windows · same UTM hardware)​

DirectioneMule 0.70baMule 3.0.0SpeedupUpload (Windows seeds → Mac leecher)22 MB/s106 MB/s ~4.8× Download (Linux seeds → Windows leeches)20 MB/s39 MB/s ~1.9×<br>Upload​

#451 — eMule CUploadDiskIOThread port. Disk reads + ed2k packet construction off the main thread, RC4 stream-desync race fixed in the ASIO layer, EPOLLET spurious-wakeup fix in HandleRead, adaptive per-slot packet sizing (10 KiB → EMBLOCKSIZE). Dominant contributor to the upload gain.

#461 — MaxUpload=0 is now literal unlimited. The legacy code set allowedDataRate = current_rate + 5 KB/s per iteration — a tracking cap that pinned the uplink at a fraction of capacity on any link above a few hundred KB/s.

#436 — Speed-limit fields widened from uint16 to uint32. Legacy 65,534 KB/s (~524 Mbps) configuration ceiling gone; gigabit-class links can now be configured.

#463 — Bandwidth-cap UI. Spin button ceiling 19,375 → 1,000,000 KB/s; field width 100 → 140 px so the + button no longer clips off on modern themes. Slot Allocation cap 100 → 100,000 KB/s.

#898 — Default SlotAllocation raised from 2 kB/s to 10 kB/s. The previous default (set in 2005) fragmented uploads into so many sub-slot slices that fast peers were rate-shaped down to a trickle.

Download​

#454 — CPartFileWriteThread. Disk writes for downloads moved off the main thread.

#484 — Throttler-wake fix. UploadBandwidthThrottler::Entry() adaptive backoff dozed for 5–25 ms between control-queue pumps, stalling the request→response loop. Empty→non-empty wake gate added on the control-queue path, plus IOCP-native async_read_some on Windows, wxMutex →...

windows amule linux leecher main throughput

Related Articles