Introduction
Given that our focus is not to use a package manager but to use AppImages exclusively, this is the next evolutionary step with Nitrux, and a cleaner directory tree would be indicative of this. With Nitrux we want to make use of AppImages for desktop applications and CLI tools, but for the rest of the operating system like libraries or other binaries, we are considering other similar means to achieve our goals of making Nitrux a modern operating system.
What is an FHS?
An FHS or Filesystem Hierarchy Standard is a standard that defines the directory structure and directory contents in Linux distributions.
Directory structure
In the FHS, all files and directories appear under the root directory even if they are stored on different physical or virtual devices. Some of these directories only exist on a particular system if specific subsystems, such as the X Window System, are installed.
Most of these directories exist in all Unix-like operating systems and are generally used in much the same way; however, the descriptions here are those used specifically for the FHS and are not considered authoritative for platforms other than Linux.
Are you crazy? Why?! Leave mah Linux alone >:(
The primary motivation is "KISS." No, not the rock band but the principle.
The KISS principle states that most systems work best if they are kept simple rather than made complicated; therefore, simplicity should be a key goal in design, and unnecessary complexity should be avoided.
Therefore we want simplicity. Obtaining and managing software is as easy as managing a single file (by using AppImages), and the same applies to the operating system itself with znx which manages immutable operating systems as single files in a device.
In Nitrux, the use of a package manager is not an integral part of the user experience.
We want to create a modern operating system and progress means making changes.
How can this new FHS be implemented?
We took inspiration from various sources when devising the FHS. The basic idea is to use multiple bundles that would be contained within the ISO and have each "bundle" include the Linux FHS separated in accordance to a more friendly categorization.
In NeXTSTEP, OPENSTEP, GNUstep, and their lineal descendants macOS and iOS, a bundle is a file directory with a defined structure and file extension, allowing related files to be grouped as a conceptually single item.
The "bundles" would be categorized like this:
- Core
- Firmware
- DisplayServer
- Desktop, and
- Applications
To the user only /Core, /Firmware, /DisplayServer. /Desktop and /Applications are visible in the root directory, but the contents are those of /bin, /lib/, /usr and so on
The structure that would be visible in the storage device would be like this:
storage_device
├─── ZNX_BOOT (partition)
│ ├─── /boot
│ │ └─── grub
│ ├─── /efi
│ │ ├─── boot
├────└────└────└─── bootx64.efi
├─── ZNX_DATA (partition)
│ ├─── /store
│ │ ├─── /os_1
│ │ │ ├─── /version_1
│ │ │ │ ├─── /data
│ │ │ │ │ ├─── /user_1_data (home directory)
│ │ │ │ │ └─── /user_2_data (home directory)
│ │ │ │ ├─── image (ISO)
│ │ │ │ │ ├─── /core.bundle
│ │ │ │ │ │ ├─── /bin
│ │ │ │ │ │ ├─── /lib
│ │ │ │ │ │ ├─── /usr
│ │ │ │ │ │ ├─── /var
│ │ │ │ │ │ └─── ...
│ │ │ │ │ ├─── /firmware.bundle
│ │ │ │ │ │ ├─── /lib
│ │ │ │ │ │ ├─── /firmware
│ │ │ │ │ │ └─── ...
│ │ │ │ │ ├─── /displayserver.bundle
│ │ │ │ │ │ ├─── /lib/udev
│ │ │ │ │ │ ├─── /usr
│ │ │ │ │ │ ├─── /var
│ │ │ │ │ │ └─── ...
│ │ │ │ │ ├─── /desktop.bundle
│ │ │ │ │ │ ├─── appimage_1
│ │ │ │ │ │ └─── ...
│ │ │ │ │ └─── /applications.bundle
│ │ │ │ │ │ ├─── appimage_1
│ │ │ │ │ │ ├─── appimage_2
│ │ │ │ │ │ ├─── appimage_3
│ │ │ │ │ │ └─── ...
└────└────└───└───└─── image_bak (ISO backup)
Each "bundle" would be mounted using the OverlayFS driver similarly to what we already do. And as mentioned to the user instead of finding these directories in the root folder:
/
├─── /bin
│ ├─── bin_1
│ ├─── bin_2
├────└──── ...
├─── /boot
│ ├─── dir_1
│ ├─── file_1
├────└──── ...
├─── /cdrom
├────└──── ...
├─── /dev
├────└──── ...
├─── /etc
├────└──── ...
├─── /home
└────└──── ...
...
The user would only see these directories instead:
/
├─── /Core
│ ├─── /dir_1
├────└─── ...
├─── /Firmware
│ ├─── /dir_1
├────└─── ...
├─── /DisplayServer
│ ├─── /dir_1
├────└─── ...
├─── /Desktop
│ ├─── appimage_1
├─── /Applications
│ ├─── appimage_1
└────└─── ...
...
This arrangement may seem familiar to the way that GoboLinux is structured. Like GoboLinux the Nitrux FHS is structured in an array of descriptive directories, e.g.,/Desktop contains the AppImage for the desktop shell; however, unlike GoboLinux we do not aim to structure each program within its subdirectory tree, where all of its files (including settings specific for that program) may be found since for that purpose we are utilizing AppImages.
Like GoboLinux and NixOS, Nitrux allows the user to have different versions of the same program installed concurrently (and even run them simultaneously).
Unlike GoboLinux but like NixOS Nitrux provides atomic upgrades via znx, this means that if the update to a new configuration is interrupted – say, and the power fails half-way through – the system will still be in a consistent state: it will either boot in the old or the new configuration. In other operating systems, a machine might end up in an inconsistent state, and may not even boot anymore.
Also, like NixOS Nitrux via znx provides the ability to perform rollbacks. If the new configuration crashes or does not boot properly, an older version can be selected.
What do you even want to achieve with this?
A benefit, for instance, is that it would allow, for example, an OEM to provide the UI component (/Desktop) or any other element as a separate part of the operating system, allowing for easy updates, easy rollbacks, and easy maintaining.
This FHS is a departure on how popular Linux distributions work on the desktop and is more familiar with how a mobile OS works making it a convergent system.
Notes
- We need to evaluate the requirements for this proposition.
- And, have an estimate of how long will it take.
Introduction
Given that our focus is not to use a package manager but to use AppImages exclusively, this is the next evolutionary step with Nitrux, and a cleaner directory tree would be indicative of this. With Nitrux we want to make use of AppImages for desktop applications and CLI tools, but for the rest of the operating system like libraries or other binaries, we are considering other similar means to achieve our goals of making Nitrux a modern operating system.
What is an FHS?
An FHS or Filesystem Hierarchy Standard is a standard that defines the directory structure and directory contents in Linux distributions.
Directory structure
In the FHS, all files and directories appear under the root directory even if they are stored on different physical or virtual devices. Some of these directories only exist on a particular system if specific subsystems, such as the X Window System, are installed.
Most of these directories exist in all Unix-like operating systems and are generally used in much the same way; however, the descriptions here are those used specifically for the FHS and are not considered authoritative for platforms other than Linux.
Are you crazy? Why?! Leave mah Linux alone >:(
The primary motivation is "KISS." No, not the rock band but the principle.
Therefore we want simplicity. Obtaining and managing software is as easy as managing a single file (by using AppImages), and the same applies to the operating system itself with znx which manages immutable operating systems as single files in a device.
In Nitrux, the use of a package manager is not an integral part of the user experience.
We want to create a modern operating system and progress means making changes.
How can this new FHS be implemented?
We took inspiration from various sources when devising the FHS. The basic idea is to use multiple bundles that would be contained within the ISO and have each "bundle" include the Linux FHS separated in accordance to a more friendly categorization.
The "bundles" would be categorized like this:
To the user only /Core, /Firmware, /DisplayServer. /Desktop and /Applications are visible in the root directory, but the contents are those of /bin, /lib/, /usr and so on
The structure that would be visible in the storage device would be like this:
Each "bundle" would be mounted using the OverlayFS driver similarly to what we already do. And as mentioned to the user instead of finding these directories in the root folder:
The user would only see these directories instead:
This arrangement may seem familiar to the way that GoboLinux is structured. Like GoboLinux the Nitrux FHS is structured in an array of descriptive directories, e.g.,/Desktop contains the AppImage for the desktop shell; however, unlike GoboLinux we do not aim to structure each program within its subdirectory tree, where all of its files (including settings specific for that program) may be found since for that purpose we are utilizing AppImages.
Like GoboLinux and NixOS, Nitrux allows the user to have different versions of the same program installed concurrently (and even run them simultaneously).
Unlike GoboLinux but like NixOS Nitrux provides atomic upgrades via znx, this means that if the update to a new configuration is interrupted – say, and the power fails half-way through – the system will still be in a consistent state: it will either boot in the old or the new configuration. In other operating systems, a machine might end up in an inconsistent state, and may not even boot anymore.
Also, like NixOS Nitrux via znx provides the ability to perform rollbacks. If the new configuration crashes or does not boot properly, an older version can be selected.
What do you even want to achieve with this?
A benefit, for instance, is that it would allow, for example, an OEM to provide the UI component (/Desktop) or any other element as a separate part of the operating system, allowing for easy updates, easy rollbacks, and easy maintaining.
This FHS is a departure on how popular Linux distributions work on the desktop and is more familiar with how a mobile OS works making it a convergent system.
Notes