Darwin, Mac OS X, Cocoa, OpenStep, NeXTSTEP. Mac security. Tech talk from Graham Lee.
My various walking adventures through the world of technology have caused me to pick up and digest all sorts of information. Not least, that if you can't explain what you know to someone else, it's not worth as much as it could be.
I was already a UNIX geek at University, having discovered Linux and Solaris during my student years. My enjoyment of UNIX systems became focused by the discovery of a novel type of workstation: the NeXT. Admittedly Apple released Mac OS X while I was still a student, but the consistency and coherence of the NeXT user interface along with the simplicity of the NEXTSTEP APIs had me hooked. When the incumbent sysadmin, and my NeXT-mentor, went off to train OS X users and administrators, I took the reins on that network.
My stopover in the worlds of Rhapsody and Mac OS X Server 1.x had to be brief because by this time Panther was already with us and Tiger was very close to release. I took the opportunity, alongside deploying Open Directory and teaching C programming in Xcode, to find out how Foundation and AppKit had moved on while I'd been concentrating on OPENSTEP and EOF 2. If the NEXTSTEP APIs were simple, then Cocoa is child's play - the clichés about throwing code away with each OS upgrade are true. Jaguar mainly stabilised the integration of the world of OPENSTEP with the universe of the Mac user, then Panther brought Bindings so we could delete all that glue code. Core Data in Tiger meant throwing out a lot of entity code, and then Leopard even stopped us writing accessors. Not only this but the Darwin undergarments were just as deliciously UNIX as ever, but brought up to date. My NetInfo code was still going to work, and I could future-proof it with Directory Services and Authorization Services.
During this time I was writing a combination of automation utilities and graphical applications to support the teaching labs in the University. I was also lucky enough to attend my first (and second!) WWDC, and the enthusiasm in the Moscone West was infectious. Not only that, but all this new stuff made sense. Alright, at the time the Intel assembler didn't make much sense, but the rest of it did. By taking away all that code, Apple were letting us concentrate on the new shinies in the OS which were just as easy to use.
So, with all these new shinies in the OS, it seemed like a good time to switch OS :-). Actually, I never quite ditched OS X, and indeed did most of my GNUstep development on the Mac even when I was working on software for the Linux platform. Judicious use of unit tests and integration tests let me be sure that my Cocoa-hosted code was going to work just as well on GNUstep. If I found something GNUstep didn't do well, I just committed a patch. It's interesting, being involved in the development of a framework like that, because it's like peering under the hood of Cocoa and seeing how the engine works.
I kept the GNUstep commit-bit after moving back to professional Mac development, though haven't used it in anger since then. Since returning to the Mac, I've concentrated on being a good citizen to both the users and the OS, and my iPhone work has followed the same paradigms. Don't make it hard for users to grok the app, or they won't. Don't make it hard for the OS to support the app, or it won't. That's not to say that every week involves four days of ripping everything apart to get the latest shiny in, but I certainly keep an eye on the latest developments and where they could be used. Even as I've dived below Darwin into xnu and I/O Kit, the same rules hold: if you surprise those around you, they're likely to surprise you back. Sometimes that can be fun, but not at 3am on a Sunday, staring at a panic log.