D. J. Bernstein
UNIX

Cross-platform compatibility

Each UNIX integrator has made its own incompatible changes to the OS. This fractures the user community, creating separate pockets of knowledge and experience for each system. It dramatically increases the costs of cross-platform support. It turns 300-page books into 1000-page books.

Here are some typical examples:
Solaris SuSE OpenBSD
/var/apache/conf /etc/apache /var/www/conf
/etc/init.d/httpd stop /sbin/init.d/httpd stop apachectl stop
/usr/openwin/blahblahblah /etc/X11/xdm /usr/X11R6/lib/X11/xdm
/etc/inet/dnscache /var/dnscache /service/dnscache/root
/etc/init.d/dns stop /sbin/init.d/named stop svc -t /service/dnscache
The frivolous variability in each row makes life unnecessarily difficult for people who deal with many systems: typical system administrators, consultants, script authors, book authors, etc. Even if you don't think you'll ever deal with more than one system, you're still suffering indirectly from the dilution of support resources.

In short, UNIX integrators have thrown away the efficiencies of the mass market. Diehard UNIX fans adapt; most users and system administrators give up in disgust.

I'm not going to take this any more. I demand cross-platform compatibility:
Solaris SuSE OpenBSD
/usr/local/apache/conf /usr/local/apache/conf /usr/local/apache/conf
apachectl stop apachectl stop apachectl stop
/usr/X11R6/lib/X11/xdm /usr/X11R6/lib/X11/xdm /usr/X11R6/lib/X11/xdm
/service/dnscache/root /service/dnscache/root /service/dnscache/root
svc -t /service/dnscache svc -t /service/dnscache svc -t /service/dnscache
I understand the benefit of having both /etc/init.d/httpd stop and /etc/init.d/dns stop; there's less text to memorize than there is in apachectl stop and svc -t /service/dnscache. I'd be even happier with svc -t /service/httpd and svc -t /service/dnscache. But that's a decision for the Apache maintainers, not the UNIX integrators!

The tremendous benefits of cross-platform compatibility come from a package's interface being exactly the same on every system. It is a relatively minor benefit for different packages to have similar interfaces. Breaking cross-platform compatibility for the sake of cross-package similarity is a horrible idea.

I used to think that UNIX integrators introduced frivolous incompatibilities because they simply didn't understand the costs. But I've realized that the problem runs deeper: they like the costs. UNIX integrators are competing with each other for new UNIX users; each integrator wants its users to stick to its system. As in Garrett Hardin's ``Tragedy of the Commons,'' every integrator sees an immediate benefit in introducing an incompatibility, even though these benefits eventually add up to a giant loss.