(no title)
probonopd | 7 years ago
After having heard that "this is not how Linux works", I was about to give up when Linus Torvalds himself gave me the impression that maybe the idea wasn't entirely insane altogether.
As for what should be done, I don't think that doing the 1.001st distribution will make any significant difference. Building a system on top of the Linux kernel that is intended to be a platform might.
But then, building something entirely from scratch would require resources I clearly don't have. So how about this:
1. Take the most popular distribution as the basis (that would be Debian/Ubuntu probably) 2. Determine a set of "Core OS" functionality that is comparable to what Windows and macOS do out of the box, and decide that this will be shipped by the Core OS 3. Use distribution packages to install that Core OS into a filesystem image 4. Uninstall the package manager (because it is a tool for the maintainers of the Core OS, not meant for users) 5. Guarantee that only new APIs/ABIs will be added to the system, existing ones can be considered stable and will deprecated only after 5 years (or so) prior warning 6. Release the Core OS once a year (Core OS 2018, 2019, ...) 7. Apps come as bundles (e.g., Rox-style AppDirs or AppImages) 8. Maybe call the loader (ld-linux.so) differently to intentionally only run applications specifically crafted for this system (debatable) 9. Guarantee 5 years of support for each yearly release 10. Developers are advised to always develop against the oldest still-supported Core OS (e.g., the 5 year old one); i.e., if we introduce a new API today then developers can assume it is "there" for everyone 5 years from now; or else they must privately bundle it (similar to how Android works) 11. Address the Desktop Linux Platform Issues https://gitlab.com/probono/platformissues in this system 12. Address the Desktop Linux Usability Challenges https://medium.com/@probonopd/make-it-simple-linux-desktop-u... in this system (possibly modify a desktop environment like XFCE to be more like the Mac/NextStep in philosophy - without copying it verbatim)
Who wants to do it?
AnIdiotOnTheNet|7 years ago
Consider what we currently consider the "filesystem" tree to instead be a "namespace" tree. /dev (device namespace), /proc (process namespace), and /sys (kernel namespace) remain where they are and two new namespaces are introduced: /file (filesystem namespaces), and /app (application namespace). Under /file, volumes are mounted to directories named after them, e.g. '/file/Primary', '/file/Vacation Photos', '/file/Windows', etc. The namespace hierarchy is a tmpfs, real disk space only exists under volumes mounted in /file. /app is any application's own AppDir.
See, each application has it's own namespace like Plan9. When an AppDir is launched, it immediately has its view of the filesystem unshared and a new namespace hierarchy is built for it under /app according to a combination of its own specifications and those imposed by the user. For instance, it may not require /proc, /dev, or /sys, and the user may have restricted it to read-only access to /file, so the new hierarchy under /app is setup accordingly. /app/app is bind-mounted to the AppDir itself, and then the actual application is launched with a chroot into /app (the new namespace we set up for it). Now it can always refer to its own AppDir relative files using /app/* (conveniently the same number of characters as /usr/, for reasons I know you've thought of). Obviously, other Linux namespaces (ipc, network, even user I suppose) can similarly be configured. The isolation portion of this plan is not entirely unlike how firejail can be used with AppImage, but it's the way the system works by default.
This allows a lot of flexibility for compatibility. An AppDir could specify that it uses the (legacy) GNU library set, so it gets a /lib in its namespace that is a bind mount to the system provided GNU libraries (/file/Primary/System/Libraries/GNU, for instance). In fact, you could run an entire linux distribution inside an AppDir this way, and you could setup its net namespace such that it displays in an Xephyr or XWayland window (or some other X server on whatever display system ends up being used). And hey, why not do the same thing for Windows with WINE? Now you have Windows and Linux compatibility layers and they're isolated as much or little as you want.
The AppDirs could also contain multiple binaries. For instance, they could be like "fat" binaries were for MacOS and NeXT where the application came with a binary for each architecture and the appropriate one was launched. Or imagine an office suite, where double-clicking the AppDir might launch the "pick the tool" window, or you could right-click and get a context menu letting you choose which tool you want to run. I was a fan of the old-school Windows Start Menu that was just a menuized view of a folder structure, so lets say that was part of your GUI, then AppDirs with the context menu show those menu items as subitems of the AppDir.
Anyways, that's a sample of the lines of thinking I have on the subject. Like you said, it's a lot of resources for one person to muster. I've gone as far as writing the code to configure application namespaces and launch them, which was shockingly easy, and I started to lay out how the init system would have to work (since it'd be responsible for automounting volumes in /file, setting up networks, feeding firmware blobs to the kernel (ugh), and launching applications at a minimum). But I find it hard to feel motivated because whenever I talk about these ideas I get into long arguments with people who think things are better as they are. I think I'd totally be enthusiastic about working on this system, or something close enough to it, if only I could find the community that actually wants something like that.
probonopd|7 years ago
Also, a large brand name behind it (not necessarily a commercial company and in no case a Linux distribution company) would probably help adoption.