製品開発における通常の段階は、研究、先行開発、製品開発、製造エンジニアリング、顧客サービス性エンジニアリング、製品リリース、製品持続性、製品引退である。
アジャイル・プログラミングと 「デブオプス 」の現代では、これらのステップの一部またはすべてが曖昧になることが多いが、すべてのステップの有用性はまだ認識されている、あるいはそうあるべきだ。
これは、私が1994年から1996年にかけて、64ビットのDEC Unixシステムと64ビットのVMSシステムのサポートとプロモーションを主な仕事としていたにもかかわらず、Linux/DEC Alphaポートをサポートした主な理由である。
私がその後もフリー・オープンソース・ソフトウェア、特にLinuxのサポートを続けているのもそのためだ。
1994年初頭には、真に「オープン」なオペレーティング・システムを利用する機会はほとんどなかった。たしかに、Unixシステムの大学のソースコードライセンスはかなり自由であったため、研究大学は研究を行うことができたし、政府の研究や産業界の研究もあった。
しかし、その研究の実装はまだコンピュータサイエンスの商業的利益の支配下にあり、研究→開発→配布のスピードは比較的遅かった。
BSD-liteは、USL/BSDI訴訟がまだ続いていたため、まだ目処が立っていませんでした。MINIXは、教育および研究用途への制限によって、まだ妨げられていました(2000年まで解決されませんでした)。
Linuxカーネルプロジェクトは、そのライブラリ、ユーティリティ、コンパイラのすべてがDigital Unix上で動作するためにすでに64ビットであったことを考慮すると、この町では唯一のショーであった。GNU/Linux V1.0(1993年後半にSoft Landing Systems、Yggdrasil、Debian、Red Hat、Slackwareなどのディストリビューションで始まった)の最初の国外追放のすぐ後に続いたのは、当初Beowulfシステムと呼ばれていた低価格の柔軟なスーパーコンピューターの必要性だった。
ドナルド・ベッカーとトーマス・スターリング博士は、独自に設計・製造されたスーパーコンピュータを置き換えるために、コモディティハードウェア(PC)とフリーソフトウェア(Linux)を使用することを体系化し、公表した。
さらに、これらのコンピュータの最初の資金調達の仕事が終わると、コンピュータは、全体として、あるいは小さなクラスタに分割して、他のプロジェクトに再展開することができた。
このモデルはやがて 「ハイパフォーマンス・コンピューティング」(HPC)として知られるようになり、今日世界で最も高速な500台のコンピュータがこの技術を使用している。
コンピュータ研究とFOSSの 「なぜ 」を始める前に、コンピュータサイエンスにおける 「研究 」の起源について見てみましょう。
コンピュータ・サイエンスにおける研究は、元来、非常に高価な機器を購入できる、あるいは独自のハードウェアを設計・製造できる主体によってのみ行われていた。
それらはもともと、研究大学、政府、そして非常に大きなエレクトロニクス企業であった。その後、中小企業も研究を行うようになった。
多くの場合、この研究は特許を生み出し、研究のさらなる発展に貢献した。やがてソフトウェアの領域は、自社でコンピューターを購入する資源を持たない企業にまで広がっていった。
マイクロソフトは、MITが所有するマシンで最初のソフトウェアを開発した。 GNUツールは、しばしばフリーソフトウェアファウンデーションが所有していないコンピュータで開発されました。
ソフトウェアは、コンピュータの黎明期に必要だった非常に高価なハードウェアの所有権を必ずしも必要としなかった。
今日では、80ドル(またはそれより安い)のラズベリーパイで、多くのコンピュータサイエンスの研究ができる。
残念ながら今日、多くの企業が研究グループを引退させたり、大幅に縮小したりしている。
「純粋な研究」をしている企業はごくわずかで、他社に公平に研究をライセンス供与している企業はさらに少ない。
特許を指標として今日の研究を測定すると、特許の75%以上が中小企業に授与されており、従業員1~9人の企業を見ると、従業員1人当たりの特許授与数は驚くべきものである。
GoogleやAppleのような大企業が全体として多くの特許を出願し、取得しているのは事実だが、従業員一人当たりの特許数は中小企業が圧勝している。
もちろん、これを読んでいる多くの読者は特許、特にソフトウェアに関する特許を好まないだろうが、これは研究を測定する方法であり、現在、多くの研究が小さな会社や「一匹狼」によってさえ行われていることを示すことができる。
1994年までに私は、コンピュータの世界における「アドレス空間」の主要なアップグレードをすべて経験してきた。
12ビットのアドレス空間(DEC PDP-8では4096個の12ビットワード)から始まり、IBMメインフレームの24ビットアドレス空間(16,777,216バイト)、DEC PDP-11の16ビット(65,536バイト)、DEC VAXアーキテクチャの32ビット(4,294,967,296バイト)まで。
多くの人が32ビットアーキテクチャに制約を感じることはなかったが、私は制約を感じるプログラマーや問題を多く知っていた。
その問題とは、私たちが「エッジ・プログラミング」と呼んでいるもので、扱うデータセットが大きすぎて、すべてを同じメモリ空間に置くことができないというものだった。
このような場合、データを「整理」または「分解」し、結果をアドレス空間からアドレス空間へ転送するプログラムを始める。
多くの場合、これはあるアドレス空間からメタデータ(または部分的な結果)を保存し、それを次のアドレス空間に適用しなければならないことを意味する。
多くの場合、これはプログラムを正しく実行する上で問題を引き起こす。
どのようなプログラムですか?天気予報、気候研究、ゲノム研究、デジタル映画制作、風洞のエミュレート、原子爆発のモデル化。
もちろん、これらはすべてアプリケーション・レベルのプログラムであり、64ビット・オペレーティング・システムの実装であれば、おそらくそのアプリケーションを書く目的を果たすことができるだろう。
しかし、これらの問題の多くは研究レベルであり、完成したアプリケーションがFOSSであろうとなかろうと、使用するツールによって違いが生じる可能性がある。
ゲノム研究のある主要な研究者は、有名なデータベースベンダーのプロプライエタリなデータベースを使用していた。
そのベンダーのライセンスでは、その研究者がデータベースの入ったディスクを単にイメージ化し、そのバックアップを、最初の研究者と同じライセンスで同じプロプライエタリー・データベースを持っている別の研究者に送ることは不可能だった。
その代わり、最初の研究者はデータを降ろし、テープを2番目の研究者に送り、2番目の研究者がテープをデータベースシステムにロードしなければならなかった。
これは、ギガバイトか2バイトのデータであれば許容できるかもしれないが、ペタバイト(100万ギガバイト)のデータで研究を行うには残酷なことであった。
この問題は、MySQLのようなオープンデータベースを使うことで解決した。研究者たちは、ディスクをイメージ化し、そのイメージを送信するだけでよかった。
私は64ビット・アプリケーションと、それが人類のために何ができるかに興味があったが、それよりも64ビット・ライブラリ、システムコール、そしてその両方の効率的な実装に興味があった。
もうひとつの例は、デジタル映画のレンダリングだ。
アナログフィルムでは、歴史的に8mm、16mm、32mm、そして(最近では)70mmフィルムがあり、(もちろん)カラーの状況では、フィルムのアナログ的な特質により、カラーの各「ピクセル」は(事実上)無限の色深度を持っています。アナログフィルムでは、フレーム間の「圧縮」という概念もありません。
各フレームは別々の「静止画」であり、私たちの目はそれが動いているように錯覚する。デジタルムービーでは、非常に多くの考慮事項があるため、ムービーの「平均」サイズや1フレームを言うことさえ難しい。
映画はワイドスクリーン?3D? アイマックス?標準画質か高画質か?フレームレートとビデオの長さは?各フレームの解像度は?私たちは、これらのビデオファイルがどれくらいの大きさになるかを知ることができます(1時間のデジタル映画の場合): 2K – 3GB、4K – 22GB、8K – 40GBです。
32ビットのアドレス空間では、最大でも2GBか4GBのアドレス空間(実装によって異なる)を使用できるため、比較的短い 「ローテク 」映画でも一度にメモリに収めることができることがわかる。
なぜフィルム全体が必要なのか?なぜ一度に1フレームでないのか?それは圧縮に関係している。
フィルムは映画館に送られたり、ブルーレイのような物理的な媒体に 「生のまま 」入れられるわけではない。
コーデック」と呼ばれる数学的手法を使って画像を圧縮し、後で解凍することで様々な圧縮技術を使って圧縮されるのだ。
これらの圧縮技術の多くは、ベースとして使用される特定のフレームと、次の(縮小された)数フレームにわたって適用される差分との間の「差分」を使用します。
もしこれが映画全体にわたって継続されたのなら、その過程で何らかの不具合が生じたときに問題が生じる。その 「不具合 」を修正するためには、ファイルのどこまで遡らなければならないのか?その答えは、プロセスを 「リセット 」し、「差分 」を最初からやり直すために、頻繁に別の完全なフレームを保存することである。
視聴には小さな「不具合」があるかもしれないが、通常は誰も気づかないほど小さなものだ。
3Dやアイマックスのようなものに必要な調整を加えれば、今日の映画イベントの巨大さがわかるだろう。
気候変動を調査する場合、64ビットの仮想メモリで、すべての海を含む地球の表面1平方メートルごとに32,000バイト以上アクセスできるのはありがたい。
研究を行うためのオペレーティング・システムを選ぶとき、いくつかの選択肢があった。クローズドソースのオペレーティングシステムを使うこともできた。
ソースコードのライセンスを取得し、秘密保持契約(NDA)にサインして研究を行い、結果を公表することができるかもしれない。
その結果は、カンファレンスで発表されるホワイトペーパーのようなものになるだろう(私はこのようなホワイトペーパーをたくさん見てきた)。
共同研究者は、ソースを入手するためにあなたと同じ手順を踏まなければならず(可能であれば)、その後、あなたはそのソースコードの「差分」を提供することができる。
最後に、あなたが行った研究が実際にプロプライエタリ・システムに組み込まれるという保証はなかった。あなたの研究が無駄になる可能性もあったのだ。
WindowsNTがアルファ上で32ビットOSとして稼働してから何年も経ってから、MicrosoftはどのOSでも64ビットのアドレス空間をリリースした。
残念ながら、マイクロソフトの強力なパートナーであるデジタルが、アルファが可能にした64ビットアドレス空間を利用するには遅すぎた。
私たちは、コンピューターサイエンスにおいて興味深い局面を迎えている。コンピューティング・パワーの「ボトルネック」の多くは、大部分は克服されつつある。
もはや、90KBのフロッピーディスクしかサポートしない、1MHz以下のクロック速度で動作するシングルコア、16ビットのモノリシックなサブメガバイト・メモリ・ハードウェアの問題で苦労することはない。
今日の64ビット、マルチコア、マルチプロセッサー、複数ギガバイト・メモリ、ソリッド・ステート・ストレージ・システム、複数Gビット/秒のLANネットワーキングは、ラップトップ、ましてやサーバー・システムに適合し、より安定した基本的なプログラミング・プラットフォームを提供する。
個人的には、生涯最後になるかもしれないノートパソコンを購入する前に、毎秒40ギガビットのUSBとWiFi 7のようなものをサポートするノートパソコンを待っていた。
同時に私たちは、SIMDが画面を非常に高速に描画できるGPU以上の意味を持つ時代から、MIMDプログラミング・ハードウェアに移行しつつあり、AIと量子コンピューティングがプログラミングの課題をさらに押し進めている。
これらはすべて、平均的な日々のプログラミングにこれらを統合する方法について、さらなる研究が必要になるだろう。
私の考えでは、共同研究は、その後の共同での高度な開発と実装の可能性を高めるために、フリー・オープンソース・ソフトウェアで行われなければならない。