I use a macbook air. I haven’t always been a mac user, but around 5 years ago I joined a company which said they would spend $3,000 on a computer so I left the land of neckbeards, printed out my X11.conf file and burnt it in a fire of virgin’s hair and blood and joined the dark side.
I don’t really mind the darkside, I actually really like it, as long as someone else is willing to spend on my machine. But the past couple days I got caught in some yak shaving which led to some realizations around the fragility of the “full stack” myth Apple likes to talk about.
Specifically, my company uses Jabber for chat and I use the excellent Open Source client Adium. We also use a self-signed certificate which Adium complains about everytime I start it. In the new version of Adium, you can say “trust this cert forever”, however doing so causes the Apple Keychain file to become corrupted (of course, this isn’t obvious). The first symptom of this is that https:// URLs don’t work in Chrome and Safari but do work in Firefox. It also causes various programs that use HTTPS to crash in weird random ways and eventually a kernel panic. Obviously it took awhile to figure out the cause of this.
The bug in and of itself could be blamed on several parties, but I think what’s more interesting is how an IM program trying to remember the validity of an SSL cert could cause such a spiraling of events. The answer is really in Apple’s philosophy around control and centralization which has propelled their company to greatness, but also exposes a brittle and vulnerable weakness.
Product (Full stack) vs. Platform (Component stack)
Apple prides itself and bases its strategy on controlling everything from the power plug to the monitor as much as it can. The story goes that this level of monopoly integration allows for seamless user experiences where each piece of the system makes sense in relation to other parts, because they were all designed to work together. Contrast that to the modular component stack where there are various layers that are interchangeable and various vendors producing software and hardware and you as the user (or a distributor) kinda slams it all together and puts a bit of duck tape around the outside.
I like to call it a product orientation vs. a platform orientation. Every time the market claims that one side has won (e.g. Windows over OSX in the 90s), the other one makes a valid push in the other direction (iPhone in the ‘00s), and back again (Android in ‘10s).
I’ve listed some of the pros and cons as I see them below (simplified of course) and some examples. Would love to hear others in the comments.
Platforms vs. Products
Unified design and UX | Variant design and UX |
Less version incompatibility problems | Massive version incompatibility problems |
Centralized software repository = better discoverability | |Federated software repository = more freedom |
Monopolized components = higher cost | |Free market = lower cost |
Monopolized dev runtimes = less developer innovation | |Multitude of dev runtimes = more innovation and fragmentation |
Tight integration = UX AND more brittle | |Loose integration = more Yak shaving but less dependance between parts |
Centralized control = vulnerable to single point of failure | |Distributed control = complexity in architecture |
Examples
Please add any other examples or flame me as required!.
Originally published at http://www.jacobsingh.name on July 24, 2013.