Porteus 5 review — A different and powerful Linux distro

fulalas
18 min readNov 29, 2022

--

People used to testing Linux distros soon realize that they are usually very similar and somehow boring. Not just because most of them are based on the same main distros, but also because they do not provide anything really exciting. But Porteus is a different distro, with many unique and powerful features, made for those who want performance and efficiency at their best, without giving up modern hardware and software.

In a nutshell, a Linux distro is basically a collection of applications, settings and scripts running on a given version of the Linux kernel. Ubuntu is the most popular distro, followed by some other big players, like Arch, Fedora, Mint, Pop!_OS and Slackware. Porteus 5 (kernel 5.18.8) was released in July 2022 and it is based on Slackware 15.0, but it does not look or behave like Slackware at all. It only uses some of its packages, and that is it. Here is a list of its highlights:

  • No installation is required since it can run live from any storage unit
  • It can run on multiple machines without changes
  • Really small: 350 MB average (depending on the desktop environment)
  • Light on resources
  • Boot time is impressive
  • One of the snappiest desktop experiences
  • Fresh system every time it boots
  • Applications can be installed/removed with double click on a single file
  • Switching between desktop environments is fast and does not mix files
  • Low chances of the user breaking the system
  • Applications and kernel are as new as possible at each release
  • Not limited to old hardware
  • No systemd

It is not perfect though, so here is the list of its limitations:

  • No proper package manager
  • In some cases the learning curve can be tough
  • Applications created by the team are very raw
  • It is not updated as often as bleeding-edge distros like Arch
  • Loading too many modules can take lots of RAM
  • Copying to portable devices will take longer than what UI says
  • Website needs to be updated

Running live

Most operating systems require the user to install them, a process that takes a lot of time and some specific knowledge, not to mention that a small mistake can mess with the user files, especially because some installers are not user-friendly. Also, it is usually limited to the specific machine where it is installed, meaning if the user wants to have the same system on another machine they will have to install and reconfigure it again.

But because Porteus runs live, the user can extract the ISO to any storage unit, like a USB flash drive, run Porteus bootable application (inside /boot) and voila: the system is ready to be used, regardless of the partition type (including FAT/NTFS), not even requiring it to be formatted. Want to run it on another machine? Just plug the same storage unit into the new machine and Porteus will load the same way. It is really that simple. Warning: by using Rufus, Etcher or any similar ISO installer application the unit will be formatted in read-only mode, making it impossible to copy anything else to it, including Porteus modules and persistent data — more on that later in this article.

Another advantage of running live is that everything the system needs will be in RAM memory so it runs really fast. Even using heavy desktop environments like GNOME or KDE, the overall performance is faster than most distros. When running lightweight environments such as Openbox, LXDE, LXQt or Xfce the performance can be mind-blowing. And although it can run on low-end machines, it is running on fast ones that Porteus unleashes all of its potential. It is a very pleasant and unique experience.

Also, if the user or some application messes with any critical system file, it can be fully restored by just rebooting into Always Fresh mode (selected in the boot menu). This can be handy for users who are learning Linux or for those who like experimenting. Not to mention that some attacks, like viruses or ransomware are less likely to affect Porteus — if the user sets Porteus storage unit to be read-only it is actually impossible to have permanent damage.

Porteus boot menu where Always Fresh can be selected

One thing that haunts many operating systems is the fact that they get bloated over time, sometimes requiring reinstallation in order to restore the original performance and storage space. On Debian and derivatives like Ubuntu, for instance, the package manager will sometimes fail to detect orphan libraries when removing packages, so the system will eventually get garbage accumulated [1]. On Porteus, on the other hand, it is possible to avoid that entirely by keeping just the files/folders the user needs.

By default it saves all changes made by the user into /porteus/changes, but only if the storage unit where Porteus is running from is formatted in a Linux partition, like xfs or ext — make sure /porteus and /boot folders have permission to read/write by non-root users. If it is formatted in FAT or NTFS, it is recommended to use Porteus SaveFile Manager, which is an application that can create a single file that will contain all the changes. This file can be stored anywhere, including Porteus storage unit (if it is not in read-only mode).

Enabling persistence for FAT/NTFS partitions using SaveFile Manager

Regardless of the partition type, once persistence is enabled Porteus will keep saving all changes on-the-fly. If you want a higher performance and cleaner approach, you can ask Porteus to save changes only during the reboot/shutdown process; the drawback is that if the system hangs or there is a power cut the current session changes will be lost. To do that just make sure that the APPEND line in /boot/syslinux/porteus.cfg has the keyword EXIT: before the path, like this:

changes=EXIT:/porteus

Another way is using the rootcopy feature, which is a folder in /porteus/rootcopy that gets copied to the system root folder during the boot process. It can be very handy if the user knows exactly which files/folders they need to restore every boot. So for example, if the user wants to restore the whole /home/guest/.config system folder (where most of the settings are stored), they just need to copy it (keeping the whole folder structure) to /porteus/rootcopy. Of course, updating the rootcopy folder manually at the end of each session can be boring, so in combination with that it is possible to use the shutdown script to copy the desired files/folders. To do that copy the script /etc/rc.d/rc.local_shutdown to /porteus/rootcopy/etc/rc.d/ (create the folder structure if it does not exist), and edit it to include this:

PORTEUSDIR=`sed -n -e 's/^.*PORTDIR=//p' /etc/profile.d/porteus.sh`

The command above will detect the unit where Porteus is running from. Below that you can add the copy commands for the files/folders you want, like this:

cp -fr /home/guest/.config/ $PORTEUSDIR/rootcopy/home/guest
cp -fr /home/guest/.mozilla/ $PORTEUSDIR/rootcopy/home/guest

If the unit where Porteus is running from is formatted in FAT or NTFS, using rootcopy may not work in some cases, like saving wifi password or VirtualBox settings. This happens when files/folders require specific permission and Porteus has no way to guess since FAT and NTFS currently have no permission capabilities.

Modules

When looking at the file structure of Porteus ISO, the user will find 5 main files with xzm extension in /porteus/base folder:

  • kernel
  • core
  • xorg
  • xtra
  • desktop environment

There are also some additional xzm modules officially available to be downloaded from Porteus server:

  • devel (set of tools to manage repositories and builds)
  • virtualBox
  • nvidia driver

As you might have guessed, Porteus is modular. So to try a different desktop environment the user can download the one they want, which is a single xzm file, and simply put it into /porteus/base folder — of course, moving out or renaming the file extension of the old desktop environment. After rebooting, Porteus will automatically detect the new desktop environment and will load it. And because it is modular, the collection of files and applications of a given desktop environment will never contaminate others. Trying a different kernel is also very simple, including the possibility to go back to old versions. It is a very elegant solution.

Each module is a SquashFS compressed file that contains a collection of files using Linux system folder structure. The process of activating/deactivating a module is basically instantaneous because instead of decompressing the whole content, it actually mounts the module into the root system folder (/), so files are extracted to RAM on demand. Be aware that some desktop environments require a few seconds to update the shortcuts.

The user is not limited to having just the modules shipped with Porteus or officially available for download [2]. For instance, because Porteus does not come with any browser out of the box, it provides a tiny application that can download most of the popular browsers, and after that the tool automatically creates a module for the chosen browser. By copying this module to /porteus/modules, the user will have the browser available every time Porteus boots. Another option is to copy the module to /porteus/optional (or any other folder, even outside the unit where Porteus is stored) and simply double-click on it to have it activated and available to be used. Double-click again will unmount it from the root system folder, freeing RAM.

Porteus Browser Tool allows users to download the most popular browsers

The user can also create a module from any folder by just right-clicking on it. There are 2 options available: xzm and zstd. The first one is Porteus default, used in all its official modules. The second one uses a different compression method (but the same file extension) that makes modules consume ~10% more RAM and storage space, but they can decompress even faster, making boot and application launches speedup significantly — the user can even repack Porteus system modules to use zstd and enjoy more performance.

The biggest problem with modules in a live system is that they will eventually be copied to RAM when activated/used, so having big or many modules loaded will require the machine to have lots of RAM available. And in the case of Porteus not finding any swap partition available, it will freeze if the system runs out of RAM. So for casual users 4 GB of RAM might be enough, but for hardcore ones who work with heavy applications, like virtual machines or video editing, 16 GB of RAM is a better option.

If the system is constantly struggling with low RAM, one solution is enabling zram, which is a 2:1 compression rate block in RAM that acts as a swap file, consuming a bit more CPU as the drawback. Check the cheatcode section in this article for how to enable it. If that is not enough and there is no swap partition available on the machine, another option is enabling swap. To do that the user can run mkfileswap script in the terminal, so if the system runs out of RAM, it will start using the swap file, which is much slower than RAM but at least the system will not freeze. It is recommended to create it in the fastest unit available. To create porteus.swap file with 4096 MB into /mnt/sda1 (you can adapt to any unit) run the following command as root (su):

mkfileswap /mnt/sda1/porteus.swap 4096

Depending on the size it can take a while, but as soon as it finishes most task managers will immediately detect the swap file and will show how much it is being used:

Xfce task manager shows the swap file status (top right)

Minimalism and performance as its motto

It is hard to believe that a full modern operating system with up-to-date desktop environments can take only 350 MB, when distros like Ubuntu take 10 times that. Even running the whole system in RAM, Porteus manages to use less RAM than most popular distros. And the overall performance is far superior. How can Porteus achieve that?

Porteus is optimized to avoid most of the files that are not critical — and boy there are many. Language, help and man files, for instance, are not shipped by default, although the user can download them from the Porteus server. It also strips unneeded symbols from basically all binaries and libraries [3]. And wallpapers, themes and icons in each desktop environment are usually limited.

In GNOME, for instance, the Settings application was patched to remove the unpopular Online Accounts feature, so WebKit2GTK package could be avoided, saving almost the size of GNOME entire xzm module. In LXQt, no compositor was added because officially LXQt does not have one, and instead of shipping the whole Qt toolkit, only the basic libraries were included, again saving heaps of memory. In Xorg module, LLVM package is stripped to almost a quarter of its original size. And the examples could go on and on.

There is special attention paid to the applications and services that are initialized during boot by default, avoiding exaggerations without breaking functionalities. Also, in some cases, like Xfce and LXDE modules, the compilation flags are the same as used in Clear Linux [4], providing the best performance for Linux. Even hardware video decode is enabled by default (for most video cards), making sure heavy videos will run smoothly and battery life is extended.

And instead of bloating the system with many and heavy applications that most users will not care about, Porteus ships just enough to provide a comfortable experience. Usually each desktop environment comes with the following collection of lightweight applications:

  • text editor
  • calculator
  • archive manager
  • image viewer
  • pdf viewer
  • torrent client
  • audio player
  • video player
  • file manager
  • terminal
  • task manager
  • network manager
  • screenshot tool
  • audio mixer
  • partition manager
  • some exclusive tiny tools, such as Porteus Browser Tool and VirtualBox builder

Unlike many distros, Porteus avoids including redundant applications — the only exceptions I found are Uxterm and Midnight Commander, which are the fallback when the desktop environment fails to load. Mpv and Celluloid video players may look redundant, but Celluloid is actually an improved graphic shell that runs on top of Mpv.

The default settings in each desktop environment are tweaked to provide a nice experience without looking too far from vanilla. Porteus tries as much as possible to provide applications native to the current desktop environment, and when there is not a lightweight option available, it usually provides one using the same toolkit (e.g. desktop environments using GTK will not have Qt applications). Also, GTK 3 Classic [5] is the only GTK version shipped in Porteus, making GTK 2 deprecated — although available as bundle.

Another nice touch is the possibility to see all output messages generated by the system and running applications by accessing the file /home/guest/.xsession-errors. When taking a look at this file it becomes clear that Porteus did a pretty good job on fixing many of the warnings that constantly flood the majority of distros.

One annoying thing in Porteus and many distros is that when copying files to portable units the UI will inform the user that it has finished before it actually has, forcing the user to open the terminal and use the command sync to check when it actually has finished. This is related to the cache and how portable units are mounted, but it seems there is no easy way to fix it.

Desktop Environments

The following desktop environments are officially available:

  • Cinnamon 5.4.2
  • GNOME 41.5 (x64 only)
  • KDE 5.23.5
  • LXDE 0.10.1 (plus updates from the official repository)
  • LXQt 1.1.0
  • MATE 1.26
  • Openbox 3.6.1
  • Xfce 4.16 (plus official patches released after 4.16)

For those crazy about performance, LXDE module is recommended, providing one of the snappiest experiences in a desktop, although it lacks some customization via UI and it might look a bit raw to some people. The same can be said about Openbox module since both modules share some packages and even the window manager, although Openbox module looks even more raw and its file manager, SpaceFM, is not exactly exciting.

If performance matters but you also want a friendly experience, Xfce module is a nice option. The defaults feel much better than vanilla Xfce, including the removal of the controversial Client-side Decoration [6] and the addition of a file search in Thunar (F3 shortcut). And like most of the desktop environments in Porteus, global shortcuts are set to respect longtime conventions:

  • Super -> show the main menu
  • Super+e -> open file manager
  • Super+t -> open terminal
  • Super+d -> show desktop
  • Super+r -> open runner
  • Ctrl+Alt+Del or Ctrl+Shift+Esc -> open task manager
  • Alt+Tab -> cycle through running applications
  • Printscreen -> make a screenshot of the whole screen
  • Alt+Printscreen -> make a screenshot of the application in focus
  • Shift+Printscreen -> show selector area to make a screenshot
  • Super+right arrow -> move window to the right
  • Super+left arrow -> move window to the left
  • Super+up arrow -> maximize/restore window
  • Super+down arrow -> minimize window
  • Alt+right click -> resize windows in any place
  • Alt+left click -> move windows in any place

For those who like Qt toolkit and excellent performance, LXQt module is a good option, resembling Xfce 4.16 in many ways and in some cases being a bit faster than its GTK brother. Some nice effort has been made trying to match both Qt and GTK look, and the custom theme used by default (also presented in Xfce) is simple but classy.

KDE module, which also uses Qt, could have better defaults and there is probably room for more stripping, but its performance is acceptable and the overall experience is balanced, providing the essential without any critical compromises. In Slackware repository, KDE has more than 360 packages, however Porteus managed to make it work with 175 packages (27,317 files), taking 83 MB (xzm compressed).

Although GNOME has many intrinsic flaws and it is not exactly efficient [7], its module for Porteus is almost a miracle. By far the fastest, lightest and most functional experience I ever had with GNOME: the whole module has only 87 packages (3,248 files), taking just 23 MB (xzm compressed). Trivia: when Porteus 5 was released, GNOME 42 was already available, but some of its dependencies are incompatible with Slackware 15.0, so the version that ended up shipped in Porteus 5 was 41.5, which I think is better than 42 and 43 [8].

GNOME running on Porteus is a big surprise

I did not spend much time in Cinnamon or MATE to form an opinion, but they look OK.

Here is a table with all the desktop environments available in Porteus and their amount of time to boot and RAM consumption — measured using btop++, which reads the real value, contrary to top, htop, free and some task managers that read much lower values [9]:

RAM consumption and boot time in all environments available for Porteus 5

For reference here is the RAM consumption of a few distros after a default installation:

RAM consumption in some other distros

But do not be misled by these numbers. What really matters is the overall responsiveness, something in which Porteus is way ahead of most distros. For instance, application startup times can be much faster on Porteus, especially when combining zstd modules with Copy To Ram (more on that later on). Another example: when building heavy projects using multi-thread it is very common to have I/O bound, even using fast SSDs, but because Porteus runs in RAM, if the user builds in any system folder the bottleneck will be moved to the CPU, reducing building time significantly and potentially extending storage units lifespan.

Downloading new applications and packages

For those who are new to Linux and do not want to go beyond the basics, it can be really challenging to put a new application to work on Porteus since it does not have a proper package manager. The one it has, slackpkg, is inherited from Slackware but it is super slow and, at least on my machine, it does not work. Another option would be slapt-get combined with Gslapt interface using Salix repository (since it lists all dependencies of each package) [10], but it does not work all the time and usually it downloads more dependencies than necessary.

So the first place to look when wanting a new application/package is Porteus Bundles program and then the modules forum section — there is even a request section. Another option is to try AppImage packaging, available for LibreOffice, OnlyOffice, NotepadNext (nice port of Notepad++) and many others. Snap and Flatpak require additional libraries to work and are usually slower, so not an ideal solution.

Another way to find stuff is in Slackware official repository [11]. If it is not there, Slackware community has nice repositories, like Alien Bob [12], msb [13], ponce [14] and salix [15]. Some applications built for other distros might work as well, like WPS Office, available for Debian and Fedora. Once the desired package is downloaded, it is just a matter of right-clicking on it to convert to a xzm module, then putting it into /porteus/modules or any other folder.

If the user still cannot find the application/package they want, the solution would involve building, which requires devel module to be activated (download available on Porteus server [16]). Luckily, Slackware community has this thing called SlackBuilds [17], which is an easier way to build things for Slackware.

Yes, sometimes what we want cannot be found in any of those places, so the final solution is finding the source code, building and solving the dependencies manually, which can be a freaking nightmare. Actually, even if the user finds a compatible package, there is no guarantee it will work properly because it might depend on other libraries that are not available in the system. So the user will have to run ldd command on the given binary/library to find its dependencies and locate them one by one, manually. The world would be a better place if developers could provide all their stuff as portable.

Cheatcodes

To extend some functionalities, Porteus has the so-called cheatcodes, which is a list of keywords that can perform specific actions during the boot process. The whole list can be found in /boot/docs/cheatcodes.txt.

For example, if the user wants to disable all CPU mitigations to improve performance (at the cost of being more vulnerable to attacks), they can use mitigations=off. Other examples:

  • zram=value% -> set the percentage of the total RAM to be used as zram (off by default). Example: zram=25%
  • bluetooth -> another way to enable Bluetooth (off by default)
  • login=root -> log in as root, instead of guest
  • norootcopy -> skip copying the rootcopy folder
  • copy2ram -> copy all modules from /porteus/base and /porteus/modules to RAM, which can speedup applications startup at the cost of a bit more RAM usage
  • rammod=module1;module2 -> similar to copy2ram, but it copies to RAM only the specified modules
  • noswap -> prevent the use of any swap partition available on the machine

To use a cheatcode, either edit /boot/syslinux/porteus.cfg and add it in the APPEND line or press tab at the boot menu and add it there. Example:

Adding cheatcodes in porteus.cfg

Community

Although Porteus community is quite small, it is not uncommon to see fast updates, like LXQt 1.2.0, which was made available as a xzm module in the Porteus forum just one day after its release [18]. This new version of the module is compiled using Clear Linux flags for even better performance.

LXQt 1.2.0 available to download in Porteus forum

Kernel updates are not just fast, they can also be done by the user [19]. Steam [20], Wine [21] and a stripped version of multilib (for 32bit applications compatibility) [22] are also available. Browsers are updated quite often and, as mentioned before, they can be downloaded via the Porteus Browser Tool.

KDE running Steam (multilib is required)

There are many other nice contributions made by the community. For example, for those performance aficionados who also want a more friendly experience than Openbox or LXDE, there is Xfce 4.12 (yes, the old version) [23]. By using GTK 2 in most of its packages, being compiled using Clear Linux flags and compressed using zstd method, this module manages to be almost as snappy as LXDE, which is quite an achievement. Some custom patches were applied, including bug fixes that were not officially patched by Xfce team and new features that only arrived in Xfce 4.16.

Conclusion

Given a user setup, Porteus will not get bloated or broken over time. And because it runs in RAM and is heavily optimized, its performance is stellar. When combined with a powerful machine Porteus can provide such an experience that would be hard to give up. In addition to that, it is very customizable and can run in any storage unit requiring no installation.

For basic users who just want to surf the web and listen to music/video, Porteus works out of the box, requiring only a browser download that can be done via Porteus Browser Tool. For users who like to play games, Steam is available as a module and it works flawlessly. For heavy users who need lots of new stuff all the time, Porteus requires patience and some specific knowledge, being frustrating sometimes, although it can be rewarding knowing exactly what is under the hood.

Porteus, being this powerful and almost unknown distro, deserves to receive more attention from the tech press. Maybe this could encourage people to help improve some of its limitations.

The machine used in this review is an Intel i3 10105f running at 4.2 GHz paired with 16 GB RAM, Samsung 980 1 TB NVMe and Nvidia GTX 1650 Super using proprietary driver.

Discussion:
Hacker News
Linux Questions

--

--