this years' Apple developer conference has made me reflect again on the strong platform lock-in that Apple has developed. (if you're unfamiliar, lock in refers to a company making it difficult for developers or users to switch to other platforms)

this is behavior i got to see a bit from the inside of Microsoft when i worked there. when they dominated the industry they used that advantage to prevent others from succeeding and consciously trap users and developers into their ecosystem.

last year apple introduced a proprietary graphics API for iOS devices named Metal. this year they announced Metal is now also coming to Macs as the preferred graphics API. its use replaces the industry standard OpenGL. Metal is streamlined for modern graphics processors and eliminates a ton of overhead which is great for performance and battery life. these goals are also addressed though with OpenGL's successor Vulkan.

it's unfortunate that Apple has focused on creating their own platform specific solution instead of embracing the new standard. sure it lets them innovate at their own pace and tailor the API to the specifics of their platforms but it also serves to make things more difficult for developers to simultaneously support non-Apple devices and operating systems. this is a sad change from Apple's embrace of OpenGL which allowed nice code sharing with Android, Linux, WebGL, and Windows.

last year Apple also introduced their own new programming language Swift to replace Objective-C. while Objective-C was already pretty specific to Apple's ecosystem it's really just a bit like some extra macros and libraries on top of the widely supported C language. you can write code in C and build it for pretty much any operating system and device. this year they announced they will open source Swift and support Linux but i still suspect code written in Swift will wind up pretty strongly tied to Apple's platforms and be much more difficult than C to target Windows and Android.

Microsoft and Google despite having their own operating systems and devices have created cloud infrastructure that is easy to use from any device and language. Apple on the other hand with CloudKit chose to make a system only for their devices. new javascript APIs may open this up a bit but it's still quite different from Microsoft and Google providing nice Objective-C bindings for their APIs and full iOS and Mac apps.

years ago when i switched from Windows to Mac it was quite refreshing to see Apple's use, embrace, and creation of open systems and standards like GCC, LLVM, OpenCL, OpenGL, Collada, sqlite, Unix, WebKit, etc, etc. now it seems as they've risen to dominance they're trending towards more and more proprietary solutions providing strong lock in and making cross platform development increasingly difficult. hopefully Apple's intentions aren't malicious, but it's still a bit disappointing.