4 ms·
> It would be an interesting exercise to make a prototype distribution that does not rely on shared objects, but has everything packed in AppImages. Frankly, I
by cxr 2y ago
> It would be an interesting exercise to make a prototype distribution that does not rely on shared objects, but has everything packed in AppImages.
Frankly, I don't think people are ambitious enough—whether it be the author of this post or those posting here in this thread.
We're at a good enough place with modern hardware—for personal/business computers, at least—that we should perhaps not even be thinking about object files at all. All software and all distros should focus on shipping software as source code; JIT everything at run time, but in such a way that JIT results aren't ephemeral—they get re-used, so by the second time (or nth time) it's the same as if all your utilities and system components had been AOT compiled. Neither the system operator, administrators, nor package maintainers should care any more about the object file format and the linking model than they care about... I dunno, the on-disk format of their browser cache for Web resources. (Quick, quick: do you know how your browser stores its cache items? Probably not, since it's not something anybody but browser developers think about.)
Fabrice Bellard already demonstrated with TCCBOOT the viability of applying this approach to the Linux kernel with acceptable results, and that was 20 years ago.
This would also help to ameliorate an unfortunate accident of history, where the fact that traditional software development and deployment has dealt in separate binaries and source code means there's friction for the user if they want to change how something works on their system. (This is true even if they've taken a hardline stance to ensure everything on their system is libre/open source—dealing with the build tooling on a project-to-project basis just isn't fun or tractable.)
This would also neutralize the entire schism between Flatpak vs AppImage vs Snaps vs <whatever>.
- cxr 2y agoSome other food for thought: there's an oddity with the way that we approach binary optimization in that we care about it a whole lot, but a program will never be optimized further than whatever optimizations were in place when the binary hit the user's machine prior to its first use (i.e. the optimizations that were put there by the compiler running on the author's machine or the distro build farm. Why should that be the case? Why should the optimization phase stop there?