If you are building a platform of unhackable devices then you need to control the gateways to hacking; i.e. the tool chain and the application distribution channel. So the clause above’s purpose is to due just that; e.g. if you want to hack code to run here you gotta pass thru our interpreters, our compilers. But they wrote something stronger. They wrote is that you have to write in language A,B, C, or D. Only. Your not allowed to write in language X, Y, or Z – even if you cross compile X, Y, or Z into A, B, C, or D before you deliver. I don’t get it
For clarity: this means you may not write a program in say Python, and then run that program’s source text thru a Python to C translator before compiling it before submitting for Apple’s approval.
One of the things that lead me to Lisp was noticing how most of the programs I wrote weren’t in the language the compilers offered me, but instead we would design a custom language better suited to the task at had. For example the rule system that drive a compiler’s optimizations, get some delicate thing to work on multiple systems, or the custom notations that generate the object system. Once I accepted how central that is to software architecture, I wanted a language that respected and encourage that.
I’m not terribly surprised that Apple has decided to run the audacious experiment of creating a platform that strives for devices are no longer computers once in the hands of the end user. Devices which the end users can not hack upon. I think it’s kind of vile and it worries me that they may succeed, but it doesn’t surprise me. I should write another post about how potent such a platform will be if they can sustain it.
They aren’t the first to go down this path. It’s what the locked phones do. This is what some of the game consoles do. And I guess if you fully embrace my presumption that the right metaphor for modern websites (aka applications) is that they are massively multi-player games, then it’s only inevitable that game industries habits would move in the rest of the application stack.
And I guess there is always C++; you can do some very wonky things at compile time in C++.