[ portability ]
thou shall write portable software
>> intro >>
writing portable software in 2026 does not make any sense.
does anybody even remember what the point was behind portable software at this point?
>> dictionary meaning >>
according to the GCIDE, the word “portable” has two meanings:
- Capable of being borne or carried; easily transported; conveyed without difficulty; as, a portable bed, desk, engine.
- Possible to be endured; supportable.
so, portable software should mean software that is developed in a way that makes it supportable by the biggest amount of environments possible.
>> noways meaning >>
when this term originated in the olden pre-ANSI C and package manager days and it captured the nature of that state of computing, so nowadays an average digital minimalist would say that to count as portable something portable would:
- optimized to be as performant as possible
- be preferably written in C99 with POSIX extensions
- have the minimum amount of dependencies possible (ideally, only libc, but not GNU)
>> reality >>
how delusional must one be to consider a mid-80s community-originated definition from the ever-changing landscape of computing as the golden truth nowadays?
i am so tired of me seeing people praising them, that i will actually write A MANIFESTO of what software practices are timeless and should be prioritized, but that’s a task for later.
for now, lets just apply the definition of the word portable means to the loosely strung together definition of portable software:
optimized to be as performant as possible
almost all ppl have like hardware that is able to run an… idk… a garbage called programming language with a (sane) package management system? and other stuff that make software easier to maintain, and if the difference wont be seen by the user - why bother?
a hard focus on the “what wont be seen” part - bloated frameworks like .NET, electron, react, gtk4, etc, etc possess very noticeable performance and especially resource usage impacts and should be avoided at all costs and arent available to people with really shitty hardware (i know a person who runs on 2GB RAM and actually can’t afford to open 2 electron applications at the same time). so, it is extremely important, but not to the degree that it is usually fetishised by the portability people.
be preferably written in C99 with POSIX extensions
from a standpoint of “runs on most hardware possible”, according to statcounter, a whopping ~28% of desktops even run a mostly POSIX operating system. and the other 72% (currently dropping, but still) runs windows, which i am not a particular fan of, but, from the standpoint of “maximising usage surface area”, the modern definition of portable must include both NT and POSIX systems. a truly “portable” program must support windows.
have the minimum amount of dependencies possible
makes sense.
although, package managers HAVE been invented since then, and:
- the 72% wont be building stuff from source and will be using the statically linked .exe
- the other 28% have them
but they arent a full solution even remotely. besides each one having its own naming conventions (or just not shipping packages in the official repos old-school-style, they still do not solve everything. tools like python, are still a pain in the ass both for the dev and the user, due to it not having any remote signs of backwards compatibility (it seems as if python basically follows semver but in a 3.MAJOR.{MINOR,PATCH} way) and that makes it not make sense to use for anything portable.
>> conclusion >>
all in all, fuck “portable software”.
an .exe on a flash drive is more portable nowadays than whatever the fuck you still consider portable… technically speaking, an old copy of adobe photoshop is by definition more portable than your 5k loc C99 POSIX CLI program.
i do like the software that is called “portable” and actively enjoy using, but for fuck’s sake, just use a term that isn’t a nostalgia-filled grammar-bender.