2018: Portable Software

I try to use all Portable Software for a few reasons. All my settings get transported with me if I use my program on another computer, or on the same computer booted into a different operating system.

My laptop can boot into either Windows XP or Windows 7, and on either system the same software is available, since the two systems share the same start menu entries, and the shortcuts all point to %homedrive%\software\_runable\*app_folder*\*app_name*.exe. %homedrive% for me is d:\, because I moved the Windows Users path. Thus the two windows systems share the same users folder, start menu, desktop files, documents directory, and “all users” profile. My laptop can also boot into linux, which shares the same desktop files and documents directory with the other two systems.

The reason I have my path name for portable software as “_runable” is because I saw the value of portable software before it began to be called portable. On my system, the _runable folder is right next to _install folder, for software that isn't practical to be made portable (for instance, it requires files in the windows directory). Some software requires entries in the windows registry for their settings, or to be able to run at all. I save software reg files in their respective folders under the _runable path, such that in order to “install” the software on a new windows system, I only need to merge the reg file into the registry (just double click on it and then click “yes”).

Chrome has portability built in also, but it works by another method: logging Chrome into your google account downloads all your settings, bookmarks, passwords, extensions, etc. Since I don't want to have chrome installed under both windows systems, I add another layer of “portability” by keeping it in the “_runable” folder.

This concept of portability is loved by some in the linux community as well, including the developers of Slax, Porteus, and NixOS. Maybe Puppy Linux also, but I'm not completely sure. The linux operating system has a special place for suffering called Dependency Hell, which these distros want to overcome.

Below is my very basic understanding of dependency hell. If I go to read the Wikipedia article I just linked, I may find I just wrote complete absurdity. (edit: I was in the ballpark)

In an ideal world, libraries would be fully backward compatible, so that a program that depends on one version of a library, would work with any newer version of that library. But library developers don't do that, and I don't know why. Linux wants to be ideal, and take up less hard drive space and resources (like RAM), and therefore use only one version of each library. So sometimes you want to install two programs that both use the same library, but different versions, and this makes for dependency hell. The portable theology, says “lets bundle the library into the program itself, so that it doesn't use the one that comes with the system”. This is contrary to the Linux ideal, but makes things much easier for the end user.

Google Chrome does something like this, within its own program (not exactly a direct correlation with the former). Every tab in the browser is its own process. The downside is that Google Chrome consumes a lot more RAM compared to non-chromium-based-browsers that have all the tabs under the same process.

However, two linux programs using the same libraries and being run at the same time is not as common. And when it does happen, loading an extra library isn't going to affect real world performance, where even 10 year old hardware has enough RAM to handle mulitiple libraries. Update: an option for portable software in Linux, with all built-in dependencies, is https://appimage.org

The developers of Google Chrome thought the same thing about having each tab be a separate process. However, I open a hell of a lot of tabs, and use 10 year old hardware. The web seems to require more memory than a whole lot of software libraries!