
Linux開発者リーナス・トーヴァルズ、来る「うるう秒」を語る
公開または更新日:2015-06-30
サイト:WIRED.jp
数年に一度の「うるう秒」が、今年もやってくる。2012年、その一瞬の誤差は、ウェブサイトのクラッシュや航空機の混乱などを引き起こした。しかし、Linuxの開発者リーナス・トーヴァルズにとっては、うるう秒などパーティーの口実程度の問題のようだ
数年に一度の「うるう秒」が、今年もやってくる。2012年、その一瞬の誤差は、ウェブサイトのクラッシュや航空機の混乱などを引き起こした。しかし、Linuxの開発者リーナス・トーヴァルズにとっては、うるう秒などパーティーの口実程度の問題のようだ
TL;DR — AngularJSのアイデアは、2012年には妥当と言えましたが、2017年においてはそうとは言えなくなっています。JSのエコシステムは、成熟度、柔軟性、および生産性の面で、あっという間にAngularの前を通り過ぎてしまいました。現在では、webpackやフロントエンドのNPM、成熟したツールとライブラリのエコシステムを背景として、大型チームを有する企業であっても、ReactやVueなどの軽量なJSライブラリを使用することで、大規模で柔軟性のあるSPAを、適切な設計で維持することが容易になっています。
Go1.5とGo1.6でGoのGCのレイテンシが大きく改善された.この変更について「ちゃんと」理解するため,アルゴリズムレベルでGoのGCについて追ってみた. まずGoのGCの現状をパフォーマンス(レイテンシ)の観点からまとめる.次に具体的なアルゴリズムについて,そして最後に実際の現場でのチューニングはどうすれば良いのかについて解説する.
最近、Linuxカーネルメーリングリスト(Linux Kernel Mailing List:LKML)では、デバイスそのものにIRQをオフにする制御を許可するかどうかについて、議論が盛り上がっている。クローズドソースのドライバをもっと容易にカーネルとやりとりできるようにしたいと考える人々は、この機能の実現を望んでいる。だがTorvalds氏は、断固としてこれに反対している。バイナリblob対GPLという図式の再来となるわけだが、両者の対立点は1つではない。この論争は、一部の人々にとっては技術的なものだが、他の人々にとっては思想的なものだ。そのため議論は、オープンソース/フリーソフトウェアのコミュニティにまで及んでいる。
この付録には、Andrew Tanenbaum教授とLinus Torvaldsの(comp.os.minixへの)投稿を軸にインターネット上で展開された、あの有名な「Linuxは時代遅れだ」という題で開始されるTanenbaum対Linus論争を記載しておこう。1992年の初めのころ、Andrew Tanenbaum教授は、オペレーティングシステムとOSの設計に関して非常に優れた現実的な考えを持ち、研究者として一目置かれている存在であった。教授は、ネットニュースで繰り広げられている話題がLinuxに移り変わっていたのに気づくと、いまがLinuxに関してコメントを述べる時期だと感じ、投稿を開始した。
私たちTwitchでは、通信が大変混み合うシステムの多くでGoを採用しています。ライブ映像を配信したり、何百万人というユーザにチャットサービスを提供したりする場合に直面する問題を考慮すると、Goはそのシンプルさや安全性、パフォーマンス、読みやすさの点で良いツールだと言えます。 しかしこれは、私たちにとってGoがいかに素晴らしいツールかを説明する、よくある記事ではありません。Goで現在実装されているランタイムにより行き詰まったいくつかの局面をどう打開するか、さらに、私たちはそうした限界に達した時にどう対応したらいいのかについて書いたものです。
身と蓋がナッシング まず身も蓋もないことをいうと、結局はCPUの命令セットとして動く言語ですからして、大差はないんですよね。 でもこういうことを言うのは、「どうせ宇宙なんて原子の集合だろ!」という小学生なみです。 なので言わない。でもその認識を捨ててもならない。魔法はないです。地続きではあるのです。 「命令型」か「関数型*1」か さてその上で、問うべき問いが、「命令型」か「関数型」であるならば、関数型に明確な優位性があらわれます。イミュータブルデータ。いい響きですね。map,filter,...いいですね。for禁止、シビれます。いいか、おまえら! forは禁止だ! 了解しました軍曹殿! この…
このブログでも何度か取り上げているように、プログラミングにおけるここ数年間のトレンドで最も大きなものは、関数型プログラミングの隆盛だと言って良いだろう。そのトレンドと共に相対的に存在感を失いつつあるのが、それまで長らく主流を占めていた「オブジェクト指向」という考え方である。関数型プログラミングの観点から眺めると、オブジェクト指向プログラミングではシステムの状態を暗黙に扱う(情報隠蔽)ために実行時の挙動が予測しづらくなり、高度な並行性が求められる現在の環境では、信頼性を確保する際の大きな障害となるように見える。
どうすれば、複数人で複雑なアプリを継続的に、安定して素早く開発していけるのか。 なんとかアーキテクチャや、なんたらパターンがあふれているけれど、どれもしっくりこない。 うまくいっているという話もあまり聞こえてこない。 もし技術的なパターンを適用するだけでうまくいくなら、今頃みんなそれをやっているはず。でも、そんなふうにはなっていない。 表面的な技術的パターンではなく、もっと本質的なことを考えるべきではないのか。 そのヒントを探してドメイン駆動設計の本を手に取りました。
翌年、Ian Lance Taylorと私がチームに参加し、5人で2つのコンパイラと標準ライブラリを開発し、その成果が2009年11月10日のオープンソースリリースとなりました。 それからの2年は、できたばかりのGoのオープンソースコミュニティの支援のもとに、大小様々な変更を伴う実験をしつつGoを洗練させ、その結果が2011年10月5日に提案されたGo 1のリリース計画となりました。
この数年、clangをWindowsでソフトウェア開発するための世界級のツールチェインにするために尽力してきた。このことについては、すでに何度も書いてきたことだ。LLVMは完全なABI互換を実現した(ただしバグ互換ではない)。互換性を実現するのが難しい分野にデバッグ情報があるが、この2年間で、LLVMは飛躍的な発展をとげた。とりあえず結論を先に書くとこうだ。WindowsでClangを使うと、PDBデバッグ情報が出せる。
アンドリュー・タネンバウムとリーナス・トーバルズの間で交わされた、Linuxカーネルとカーネルアーキテクチャ一般に関する議論。 1992年の議論は、比較的穏やかに始まった。 2つの陣営は、まずカーネルの設計について基礎的なことをお互いに述べあった。 2つの陣営の間の一連のやりとりは、時がたつにつれてあらゆる面で詳細になり複雑になっていった。
Lispと聞くと、冷蔵庫のような大きいサイズのコンピュータや、大文字のアルファベット文字列や括弧の並びといったような過去の時代のことが頭に浮かびます。そう、非常に多くの括弧。何故、オブジェクト指向プログラミングの作成者たちは、そんなにもLispのアイデアに魅了されるのでしょうか。そしてまた、アイデアとされるプログラミング言語というものは、どうやったら説明できるでしょうか。こうしたことを教えてくれなかったコンピュータ科学の教育を責めるべきでしょうか。
ところで、Linuxがブレークして随分時間が経った2006年にも、Tanenbaum氏はマイクロカーネルの優位性を主張する論文を発表しました。その経緯を簡単に纏めたのがTanenbaum氏の"Tanenbaum-Torvalds Debate: Part II"というエッセイです。(尚その中で、少しばかりLinus氏がOO指向を毛嫌いにする要因にも触れております。)とは言っても、結局はマイクロカーネルとモノリシックカーネルのどちらが優れているか(理論上ではなく実践的に)はもっと後世の人が判断することになるのでしょう。 その私訳を以下に載せておきます。
どのように何をロギングするかを知ることは、ソフトウェアエンジニアが解決すべき最高に難しいことの一つだ。アプリケーションのログを拡張する手助けとなるのがこの「十戒」だ。
突然だが、本章を始めるに先立ち、プログラム実行時のメモリ空間の状態について予習をしておこうと思う。この章ではコンピュータの低レベルな部分にか なり踏み込んでいくことになるので、あらかじめある程度の知識を仕入れてお かないと太刀打ちできないのだ。それにこの後の章になればいずれ必要になっ てくる。ここで一回やってしまえば後が楽だ。