1. Static vs. dynamic linking – a cost‑benefit debate
Static binaries are smaller and can enable aggressive dead‑code elimination, but they lock you into a single libc and make patching harder.
- “In practice, a statically linked system is often smaller than a meticulously dynamically linked one … the space and performance gain per program is quite significant.” – arghwhat
- “Dynamic libraries make a lot of sense as operating system interface when they guarantee a stable API and ABI … for anything else static linking is superior.” – flohofwoe
- “For most cases, a single Windows exe that targets the oldest version you want to support … and so on is still the best option.” – account42
2. Cross‑platform / cross‑distribution packaging
Tools like AppImage and Cosmopolitan promise “compile‑once, run‑everywhere,” yet they come with size, performance, and compatibility caveats.
- “Appimage exists that packs linux applications into a single executable file that you just download and open.” – sambuccid
- “AppImages tend to be noticeably slower at runtime than other packaging methods and also very big for typical systems.” – a022311
- “Cosmopolitan goes one further: binaries that runs natively on Linux + Mac + Windows + FreeBSD + OpenBSD + NetBSD + BIOS on AMD64 and ARM64.” – quesomaster9000
3. Glibc/ABI compatibility and kernel constraints
The Linux ecosystem struggles with forward‑compatibility because glibc and the kernel evolve independently.
- “glibc is the only one who even has a compatibility story.” – AshamedCaptain
- “If you link with older glibc you can run on older systems.” – account42
- “The problem of modern libc (newer than ~2004) isn't that old software stops working. It's that you can't compile software on your up‑to‑date desktop and have it run on your ‘security updates only’ server.” – marcosdumay
4. Maintenance, licensing, and practical overhead
Bundling libraries or shipping static binaries imposes extra build, update, and legal work that many developers find impractical.
- “Updating dependencies in a statically built distribution would have no effect.” – rlpb
- “If you want to use dlopen(), you're just reimplementing the dynamic linker.” – weebull
- “You can’t just ship a .so from Nvidia – it’s a copyright violation and won’t run on other GPUs.” – c0balt
These four themes capture the main arguments that surfaced in the discussion.