I suspect this isn't being held in case the Mac market falls apart, but in case the iPad market starts losing to Surface and friends.
I suspect this isn't being held in case the Mac market falls apart, but in case the iPad market starts losing to Surface and friends.
Non-strategic value though is probably just as important as any of this stuff: as probably most of HN knows well, keeping a codebase portable can be quite helpful in terms of plain and simple quality. Obscure bugs or bad patterns that are hard to find on one architecture can be a lot easier to identify on another. It can help promote discipline and good practices. Portability I think is really a constant process rather then a goal or single thing, it's a lot easier to have worked on it all along for years before you need it then try to "port" something later because without the constant pressure of staying portable it's all too easy to start falling into dependence on features (or worse, quirks) of a single arch and build up more and more technical debt. Then when the "bill" (not necessarily just in terms of money but sheer developer hours) finally comes due it's effectively unpayable.
• which are "obvious" and perhaps even necessary for productive coding of distributed systems software; and
• which have huge economies of scale (one shared cluster for all customers beats the pants off the performance+availability of your company's puny little three-node private cluster), and yet...
• which other major clouds don't support at all.
Effectively, all the "clouds" currently only offer between 30% and 90% of what you'd want in something that called itself "a cloud." Nobody has a "whole cloud" (AWS is closest, but still not there.)
Designing for portability between these clouds would be like writing assembly intended to be portable between processor architectures, when only one architecture had an ALU, only one had registers, and only one could conditionally branch. It would be madness.
---
Personally, I feel like, to be able to sensibly design for portability between cloud providers, they'd need a lot more features in common than they have now.
Maybe we could invent a minimum common standard to hold the cloud providers' stacks to—maybe a small one at first, with a growing list of expectations over time; or maybe a "core" spec, and then a number of "levels" of support atop it. Then you could say you've targeted "IaaS Level 3", and clouds could claim to support that, and cloud-abstraction libraries like Fog could actually do something useful.
This is just my speculation. But, 1) You learn things; 2) You lessen lock-in / dependence, in turn reducing the markup you have to pay on existing production inputs.
Apple's benefited very considerably from the increasing customization and optimization of its phone CPU et al. platform. What's the argument against carrying that over to their computer lines, if and when they can make that a relatively smooth transition?
Right. Even if they had no intent of making ARM laptops (although I suspect they probably do have that intent), the exercise of keeping the code portable between Intel and ARM would serve them in good stead even if they later went to yet a third CPU architecture.
(That said, even on this account they had laptops running Intel for several years before the transition was decided upon).
I forget the exact magic method, and don't know if it is still in shipping versions of OS X, but I would be surprised if at least internal-to-Apple versions of their compiler and toolchain didn't still have this available for use.
Give me a foldable iPad that still has screen in both halves, but that is usable in landscape, and I will buy.
Appropriate haptics could make it work like a tiny laptop in portrait, but like a regular all-screen iPad in landscape.