Portability matters

Published 2017-11-13 on Drew DeVault's blog

There are many kinds of “portability” in software. Portability refers to the relative ease of “porting” a piece of software to another system. That platform might be another operating system, another CPU architecture, another web browser, another filesystem… and so on. More portable software uses the limited subset of interfaces that are common between systems, and less portable software leverages interfaces specific to a particular system.

Some people think that portability isn’t very important, or don’t understand the degree to which it’s important. Some people might call their software portable if it works on Windows and macOS - they’re wrong. They might call their software portable if it works on Windows, macOS, and Linux - but they’re wrong, too. Supporting multiple systems does not necessarily make your software portable. What makes your software portable is standards.

The most important standard for software portability is POSIX, or the Portable Operating System Interface. Significant subsets of this standard are supported by many, many operating systems, including:

  • Linux
  • *BSD
  • macOS
  • Minix
  • Solaris
  • BeOS
  • Haiku
  • AIX

I could go on. Through these operating systems, you’re able to run POSIX compatible code on a large number of CPU architectures as well, such as:

  • i386
  • amd64
  • ARM
  • MIPS
  • PowerPC
  • sparc
  • ia64
  • VAX

Again, I could go on. Here’s the point: by supporting POSIX, your software runs on basically every system. That’s what it means to be portable - standards. So why is it important to support POSIX?

First of all, if you use POSIX then your software runs on just about anything, so lots of users will be available to you and it will work in a variety of situations. You get lots of platforms for free (or at least cheap). But more importantly, new platforms get your software for free, too.

The current market leaders are not the end-all-be-all of operating system design - far from it. What they have in their advantage is working well enough and being incubent. Windows, Linux, and macOS are still popular for the same reason that legislator you don’t like keeps getting elected! However, new operating systems have a fighting chance thanks to POSIX. All you have to do to make your OS viable is implement POSIX and you will immediately open up hundreds, if not thousands, of potential applications. Portability is important for innovation.

The same applies to other kinds of portability. Limiting yourself to standard browser features gives new browsers a chance. Implementing standard networking protocols allows you to interop with other platforms. I’d argue that failing to do this is unethical - it’s just another form of vendor lock-in. This is why Windows does not support POSIX.

This is also why I question niche programming languages like Rust when they claim to be suited to systems programming or even kernel development. That’s simply not true when they only run on a small handful of operating systems and CPU architectures. C runs on literally everything.

In conclusion: use standard interfaces for your software. That guy who wants to bring new life to that old VAX will thank you. The authors of servo thank you. You will thank you when your circumstances change in 5 years.

Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to ~sircmpwn/public-inbox@lists.sr.ht [mailing list etiquette]


Articles from blogs I follow around the net

Status update, May 2019

This month is a little special: it’s been one whole year I’ve started writing status updates! My list of projects has been growing, little by little, and I now spend a pretty big slice of my “open-source contributions time” doing reviews. While this gives …

via emersion June 4, 2019

Updates in May 2019

This post gives an overview of the recent updates to the Writing an OS in Rust blog and to the used tools. I was quite busy with my master thesis this month, so I didn't have the time to create new content or major new features. However, there were qu…

via Writing an OS in Rust June 3, 2019

Giving up on wlroots-rs

Giving up on wlroots-rs

via Way Cooler April 29, 2019

Generated by openring