Appleはモジュラープログラミングを禁止している

ちょっと面白かったので訳してみた。


http://3dpancakes.typepad.com/ernie/2010/04/apple-bans-modular-programming.html

Appleはモジュラープログラミングを禁止している

新しいiPhone開発者ライセンスにiPhoo開発者が使用できるプログラミング言語を制限する一節が入ったことで、あちこちの開発者たちがえらく腹を立てている。これがその問題のパラグラフ全文だ

3.3.1 - アプリケーションは文書化されたAPIのみ使用可能で、プライベートAPIを利用してはならない。アプリケーションはObjective-C、C、C++またはJavaScriptで書かれていなければならず、C、C++やObjective-Cで書かれたコードのみがコンパイルしたり文書化されたAPIに直接リンクできる。(トランスレーションまたは互換レイヤーやツールを介して文書化されたAPIにリンクするアプリは禁じられている。)(http://www.applelinkage.com/#100409010)

例えば、僕が厳密にこの規定にそってiPadアプリを書きたいと思ったとしよう。当然、pythonやrubyやLuaや(神よ、赦し給え)ActionScriptを使うことはできない。だけどまぁ大丈夫なはずだ。どのみち僕はCの方が詳しいからね。

もちろん僕はよく訓練されたコンピューターサイエンティストだから、モジュール分割されたコードを設計する。タッチのトラッキング、グラフィックの出力、物理シミュレーション、得点の管理などに特化した様々なモジュールなんかに分割してね。コードのモジュール化を守るために、それぞれのモジュールに含まれるルーチンの呼び出しのシンタックスや、機能、副作用、必要な事前条件、エラーコードなんかもきちんと文書化しておこう・・・

ん、ちょっと待てよ?これはAPIじゃないか。どこからみてもこれは非常に良く定義されたAPIだ。そしてこれはAppleのAPIじゃないから、プライベートなAPIということになる。クソッ。もしかしてそもそもモジュールに分割することなんてできないんじゃないか。全部を頭の中でまとめ上げるなんて出来ないぞ。

あー、まぁいいだろう。少なくともコードを関数に分割して整理することはできる。そうすればバカでかいスパゲッティの相手をすることだけは避けられるはずだ。

いや、待て。AppleのAPIを実行するサブルーチンを呼び出すサブルーチンを使うことと、「トランスレーションまたは互換レイヤーやツールを介して文書化されたAPIにリンクする」ことの違いはなんだ?そんなものはない!おいおい!!

結局、たった一つのバカでかいスパゲッティを書くしかなさそうだ。せめてアプリをシンプルに保つようにしなきゃな。(AppleのAPI以外の)関数呼び出しを使わずにHashlifeアルゴリズムを書くというのはたいへんなことだけど、もしうまくできたら、iPhooで動く最高のライフゲームシミュレーターの完成だ!まずは座ってどういう設計にするか考えよう。ちょっとそこの紙を取って・・・

って、ダメだダメだ。僕は擬似コードを書くことも認められていない。擬似コードは'...must be originally written in...'という条項に反してる!考えるより、直接コードに落としこむことに専念した方がいいみたいだ。基本的なライフゲームのアルゴリズムはそれでも大丈夫な程度にシンプルなのが救いだな・・・

だが、待てよ。そもそもライフゲームはチューリング完全だ。どんなプログラムもライフパターンに落とし込んで、「トランスレーションまたは互換レイヤー」(僕のシミュレーターのことだ)を通じて実行できる。ということは、新しいライセンスが僕のネイティブ・スパゲッティ・C言語製シミュレーターを禁止することはないけど、実際にはその上でどんなシミュレーションを実行することも明確に禁止されていることになる・・・

以上はまぁたわ言だけど、でも論理的には正しいと思うよ。