Web Excursions 2022-01-21
What Goes Into Making an OS to Be Unix Compliant Certified?
I was the tech lead at Apple for making Mac OS X pass UNIX certification,
and it was done to get Apple out of a $200M lawsuit filed by The Open Group,
for use of the UNIX™ trademark in advertising.
The lawsuit was filed because the owner of Mac OS X Server kept putting “UNIX” on the web site, and all other marketing collateral for the Server product.
The options were:
Make Mac OS X actually UNIX
this would also make The Open Group industry relevant,
when at the time they were losing a lot of that to Linux’ increasing popularity —
which is why it was an option on the table at all
Buy The Open Group for about a billion dollars
I was asked if I could lead a team to do #1.
We ran the compliance test suite against the existing Mac OS source base, and it immediately errored out because of the header files.
We made a two line change that moved a type definition from
<stdio.h>
to where it was supposed to beThat one line change broke 152 projects (from memory; that number sticks up, but it might have only been 137)
We went through, and fixed every single one of those projects to build with the change, or without the change.
Yes, we had access to all of Apple’s source code, at that point in the game.
then the VP of engineering, Bertrand Serlet, re-escalated the priority on the ones which had been downgraded.
We were promised 1/10th of the $200 million [saved from the lawsuit], or $20 million in stock, on completion.
I got the $10 million, because it was going to be my job on the line,
and potentially, my ability to work in industry at a high level, ever again, in the future.
Also, the tech lead has to fix anything no one else fixes, or no one else can fix, because they are the DRI (Directly Responsible Individual).
I had estimated a year, for a team of 5 individuals [to complete the certification].
As far as the rest of Apple was concerned, we had just closed the “Fix Header Files” bug,
which encompassed a lot of other bugs that were for individual header files.
[But] I knew going in that forcing the header file changes —
and the project changes associated with them —
would be the biggest individual part of the project.
That took about two months, playing fast and loose with the commit rules, and we made short work of them.
Ed did most of the libSystem — libc + other system libraries, rolled into one — with assistance from me in moving things out of the namespace;
this is why there are header files in /usr/include/sys that begin with “_”, for example.
After the low hanging fruit, there was a lot of other work, like rewriting the signal system in the kernel, which was not that low hanging.
Eventually, we had everything working and passing the tests. We were ready to pull the trigger.
And then they pulled in the Intel code changes, and crapped all over everything, because we were told to wait two weeks.
And then we were told we could not integrate for Tiger.
That we would miss our self-imposed deadline. Because it was “too much change at once, with the Intel changes”.
Tiger dragged on for another 6 months before release, with week-for-week slips. This was because of Intel-specific bugs — not in the kernel.
If I were asked to do the same thing for Linux, it likely would take five years, and two dozen people.
Linux is pretty balkanize, has a lot of kingdom building, and you have to pee on everything to make it smell like Linux.
I could do the same in FreeBSD in about a year and a half, with a dozen co-conspirators to run the changes through.
You have absolutely no idea how much Apple contributed to the Open Source community,
as part of this project, because it was a secret project — at least to people outside Apple — so we didn’t advertise the fact.
A lot of gratitude — but it wasn’t collective, and so Apple was still faulted for “using Open Source code, but never contributing back”.
We fixed at least 15 major gcc bugs, for example.