読者です 読者をやめる 読者になる 読者になる

望月いちろうのREADME.md

書き溜めておいた技術記事や旅行記のバックアップです。

私のプログラミング作法 | リチャード・ストールマン(RMS)

f:id:mochizuki_p:20170222191501j:plain

How I do my Computing

リチャード・ストールマン

私はフリーソフトウェア財団のフリーの初期化プログラム(libreboot)とフリーのOS(GNU/LinuxのTrisquelだ)をThinkpad X60を使用している。

これはフリーの初期化プログラムとフリーのOSを採用したものとしては、史上初めて一般に販売されたものだ。従って、フリーソフトウェア財団が初めて承認したコンピュータでもある。(しかしながら、レノボはそのようには売ってはいなかった)

それ以前は、龍夢(Lemote Yeeloong)(注:中国製の格安ラップトップ)を何年か使用していた。

当時はフリーの初期化プログラムとフリーのOSを利用できるのものとして、唯一個人が買えるものだったが、初期状態では、フリーのOSを搭載していたわけではない。

その前は、OLPC(One Laptop per Child)(注:子供向けのミニコンピュータ)を数週間使用していたことがある。

しかし、OLPCプロジェクトがWindowsを採用することを決定したので、私はプロプリエタリなソフトを認めたように思われないように、使用をやめた。

また、私が使用していたOLPCは内部でノンフリーなWiFiモジュールを使用していたので、私は外付けのWiFiを使用していたことも理由にある。

私が恐れていた結果、何百万人もの子供達がWindowsをOLPCで利用することは実際には起こらなかったが、その代わり、子供達はIntel ClassmateでWindowsを触ることになった。

それ以前には私は完全にフリーなGNU/Linuxのシステムを動作させていたが、BIOSはフリーではなかった。8年もの間、ノンフリーなBIOSを回避するために悪戦苦闘していた。

私たちには好ましいGNU/Linuxのディストリビューションが無い。 私はすべての100%フリーソフトで構成された倫理的なディストリビューションを推奨している。

特定のディストロを推奨しているように見られるのを避けるために、ここで名前を挙げるのは避けておく。

私はこれらに基準を設けてジャッジする立場になり。たとえ、これら全てを実際に試すのは大変な苦労だし、する必要もない。

利便性のために、私は大抵の場合テキストコンソールを使用する。私の仕事の大半はテキストの編集であり、テキストコンソールで仕事をするのがより効率的だからだ。

テキストコンソールでは、タッチパッドをもし間違えて押してしまったとしても影響がないからだ。

私はX11をGUIが必要な仕事をするときに使用している。

私は、GUI環境やウィンドウマネージャーを好ましいもと考えていない。なぜなら私はGUIがあまり好きではないからだ。どうかこの2つを比べることに時間を浪費しないで欲しい。

これは倫理的問題ではない。これは個人的な好みに過ぎない。倫理的なレベルでは、フリーソフトはフリーのGUIソフトを提供することが重要だと思う。そしてそれがGNUプロジェクトが3つのプロジェクトを発足した理由でもある。

私は自分の開発時間の大半をEmacsに費やした。私はM-xrmailとC-x mを使ってメールを送受信している。他のEメールクライアントを利用したことはない。原則として、他のフリーメールクライアントを紹介してもらえれば嬉しいのだが、しかし、それは私にとっての優先事項ではないし、時間も足りない。

このページもEmacsで編集している。一方でボランティアが政治のノートをurgent noteを書いている。私は他にWebサイトをメンテナンスする方法を知らない。原則として他のやり方を知れれば嬉しいのだが、それについて学ぶことは優先度が低く、私には他にすべきことも多い。

このサイトは非常にシンプルな方法でメンテナンスされている。例えばこのページはHTMLだ。私はシンプルなHTMLしか知らないので、他の詳しい人が上の箇所と下の箇所やその他の複雑な箇所を追加してくれている。

ボランティア達が政治的ノートと毎日私から受け取り、更新をしてくれている。そしてCronが毎2ヶ月ごとに政治ノートを繰り越させている。写真のギャラリーはPerlのスクリプトで生成されている。これらの特徴はこのコードで実現している。

もし手助けをくれるのなら、RMSにgnu.orgからコンタクトをとって欲しい。

“ユーザー・エクスペリエンス"を設計するというコンセプトの説明は、私がそれを極めて不愉快に思う理由も説明している。 これがstallman.orgをシンプルに保っておきたい理由である、それはUXではなく、特定の情報、意見、行動そして機会を掲示するための場所であると考えているからである。

私はそれをフリーソフトで置き換えてやろうと決意する以前に、Unixを使ったことはない(わずか数分たりとも)。私がその設計を真似しようとした理由は、移植性があり極めてクリーンだったからである。私はUnixのファンであったことはない。むしろ批判的であるが、モデルとしては良いだろう。

90年代の半ばには1日の大半を一本の指でタイピングせざるを得ないほどのひどい腱鞘炎に悩まされたことがある。フリーソフトウェア財団は私のために、1日のうち何時かの間、タイピストを雇ってくれたが、その他の時間は痛みに耐えなければならなかった。数年後にわかったのは、その痛みの原因はキーボードの硬さのために強くタイプせざるを得ないためだとわかった。キーボードをソフトなタイプに変更して、キータイプの力を少なくしたら、症状はほとんど和らいだ。

手根管症候群のためではなかった。私は腕をなるべくまっすぐにしてタイプすることで予防している。繰り返しのストレスで引き起こされる痛みにはいくつかあるらしく、君が以前聞いたことのある病名だと思わない方が良いだろう。

なぜ私はPOSIXという名前を作ったのか?

私はインターネットが初めて使われ始めたころからインターネットを利用している。私はUUCPを使ったことはないが、時々、UUCPを経由するアドレスにEメールを送信することがある。

インターネットの接続については注意している。特に私は個人の特定を避けるためにポータルを経由した接続を拒否し、ノンフリーなJavaScriptを起動しないように、注意している。一方で実際に接続しているのは私でないという情報を与えることは気にしない、うまくいくのなら。

私は私が誰か知っている人のホームページに頻繁にアクセスするし、そのことに心を迷わすこともない。私が気にしているのは私の個人情報がデータベースに保存されて検索される可能性である。これはメディア接続アドレス(MAC)を定期的に変更することで対抗している。

私はインターネットの使い方について注意を払っている。

一般的に自分のマシンから、特定の親しい特別の関係の直接インターネットに接続することはない。通常は他のサイトからプログラムにEメールを送ることでウェブサイトを取得している。wgetでページを取得してから、メールで帰ってくる。そしてWebブラウザで閲覧するのである。直接HTMLを閲覧する方が簡単するにも関わらず。私は最初lynxを試してみた。

私は時々関係のないサイトをTor経由のIceCatを利用してブラウズしている。一部の例外を除いて、私は個人を特定するような情報を与えることはない。インターネットのトラッキング対策としてはそれで十分だと思う。IceCatはトラッキング用のタグと大半のフィンガープリントの手法をブロックするからだ。

私はWeb上でお金を払うことはしない。ネット上で支払いが必要なことはしないのだ。(例外はstallman.orgのドメイン料でそれは私個人と結びついているからだ)クレジットカードでの支払いも避けている。

しかし匿名性を保てるのなら電子書籍や音楽配信にお金を払っても良いとも考えているし、別のやり方ではそちらの方が倫理的だろう。しかし、その選択肢は存在しないにも等しいので、別の道を探しているところだ。

最も優れたプログラミング言語はLispである。もしLispを知らないのなら協力でエレガントなプログラミング言語の意味するところを知らないということになる。一度Lispを学べば、たいていの言語の欠点がわかるようになる。

各種特化したデータ型にフォーカスした大半のプログラミング言語と異なり、Lispはわずかな型しか提供しない。特定の型を準備する代わりに、これらの型を組み合わせる。従って、ある型のリストを定義する代わりに、あらゆる型を許容するただ一種類のリストを提供する。

他の言語がある型のリストを検索したり、ある型のリストを定義できるリスト検索ジェネリックを定義できる代わりに、Lispはあらゆるリストを簡単に検索できる関数を定義できる。

加えて、Lispでの関数の表現はデータとしてのもので、ある意味、操作が簡単になっている。

Lispを始めるときには、REPLが利用できる。他の言語にこの特徴が備わっていることは少ない。

Lispの能力の高さを評価している一方で、私は関数型プログラミングを支持しているわけではない。副作用のあるコードに解く問題があるわけでもないし、現実的な理由がない限り、それを避ける理由もないだろう。書いているうちに自然と関数型になるコードが存在する一方で、自然と副作用を含むコードも生まれてくる。これに関しては特に強い意見を持っているわけではない。私は自由と正義の問題に関してのみ強い主張をするようにしている。それは世界からノンフリーなソフトを駆逐するためだ。

Lispは簡単な言語でもあるので、プログラミングに初めて触れる人にもお勧めできる。Emacsをテキストエディタに選ぶのがいいだろう。ここにEmacs Lispの入門記事がある。フリーソフトウェア財団から紙の本を注文することも可能だ。

Scheme(そしてプログラミングに対する深い洞察を)をAbelsonとSussmanの「コンピュータプログラムの構造と解釈」から学ぶといいだろう。紙の本は有料だがオンラインでは無料で公開されている。

しかし、Amazonは利用しないで欲しい。

私のお気に入りの言語はLispとC言語だ。しかし、1992年ごろからフリーソフト運動で忙しくなり、あまりプログラミングに時間をかけられなくなった。2008年ごろにはプログラミングのプロジェクトをやめてしまった。結果とし、PerlやPython、PHPやRubyのような新しい言語を触れる時間と機会は得られなかった。

私はJavaについての本を読んだことがある、それはCから華麗な発展を遂げた言語に見えたが、それを使用することはなかった。いや、わずかにJavaのコードを書いたことはあるが、そのコードはCとLispから移植したに過ぎない

対照的に、C++は本当に醜い言語に思える。

C++の欠点は、思い出す限り、1990年頃に私が認識したのは、構文と

シンタックスについては、その文法は曖昧で、Cとの互換性もない。それはCからC++へのスムースな意向を妨げている。

セマンティックについて言えば、C++の抽象オブジェクトの機能は、実際の型を使って実際にコンパイルするときになって問題にある。しかし、その場合、抽象オブジェクトは関数の呼ばれる命名規則と等しい。抽象オブジェクトが本来の力を発揮するのは実際に実行されるときになるまで型がわからない場合だが、C++はうまくこの機能を活かしている。しかし、それは後付けで、ひどい関係性でしかない。

おそらくSTLにもひどく醜い実装が散見されるのだろう。実際にコードを見たことはないが、それは私がC++を学んだ後に追加された機能だからだ。

皆がPythonが基本的にLispに似ているというので、ドキュメントをざっと見てみたが、私は似ていないと思う。それは'read'も'eval'も'print'もかけているからだ。

私はノンフリーなソフトの利用を強く拒絶し、私のコンピュータにインストールすることを許さない。

しかしながら、訪問先で、自分のPCを利用できず、たまたまに利用できるPCにノンフリーなソフトが入っていたら、仕方なく使うこともあるだろう。 それは簡単なブラウジングかもしれない、それは私にソフトウェアライセンスについての同意を求めないからで、そのPCの存在に私の責任が及ばないからで、かつ権利者に追加のコピーを作らせないからである。もちろん、その人にはフリーソフトで構成されたマシンを使うように勧めるが、あまり強くは勧めない。それは迷惑がらせることは逆効果だからである。

同様に、キヨスクや公衆電話、あるいはATMのような場所でノンフリーなソフトが使われていても仕方がない。それらの管理者がフリーソフトに切り替えてくれるとありがたいのだが、その時まで待つ必要はない(私はこれらの機器の管理者が個人情報を悪用する危険性を危惧しているのだが、それはフリーソフトを利用していても同じことだ。これに対してはこの手の情報を与えなければならない活動を極力おさえることである)

これがしばらくの間の私のマシンを使用する際のポリシーになる。もし1日1時間でも経ったらそれは「しばらく」ではなくなる。それは標準的な使用法だ。その点において、私はノンフリーなソフトを使用しているコンピュータは避けることにしている。そして自由なコンピューターが簡単に使えるような環境づくりをするのが私の義務だろう。

同様に、もし誰かにコンピューターを用意する機会があったら、フリーソフトを導入する倫理的責任が発生する。そのような場合では、私は自分のものと同様なフリーソフトを推奨する。

電子レンジのような機器においては、ソフトウェアの更新は一般的ではないので、コンピューターとは呼べない。その場合、デバイスはプロセッサーやソフトを備えているか、あるいは別のアナログな機構を備えているか?と認識する必要はない。しかし、それが「ファームウェアをアップデート」ボタンを備えていれば、それは別のソフトウェアをインストールすることが一般的になるので、それはコンピュータである。

Skype(あるいはあらゆるノンフリーな遠隔操作可能なコミュニケーションプログラム)はそのネットワーク効果から特殊例である。Skypeを使用することは、他の誰かにノンフリーなソフトを利用することを進めることと同じだからである。だから私はどのような場合でもSkypeは使わない

NetflixやSpotifyはノンフリーなクライアントソフトを必要とし、DRMのようなコピーコントロール技術を使ってコンピューターにデータをインストールされないようにしている。DRMを突破できないのならDRMを使用すべきではないし、これらのサービスも利用すべきではない。

この手のコピー防止プログラムの悪質な点は不正な契約をユーザーに結ばせようとする点であり(EULA)、それは著作権法よりも厳格である。私はEULAには反対である。あなたもこれを拒絶すべきだ。

これらのストリーミングサービスは悪質な技術であり、人々を反社会的に見ている(もしコピーができなければ、コピーを共有できないからだ)それを拒絶することは倫理的に極めて重要だ。

かつて、友人が私とNetfilxで一緒にビデオを見ないかと誘ってきたことがある。私はNetfilxのストリーミングは自由に反しているとして拒絶したので、今後一切呼ばれなくなってしまった。

私は検索エンジンはDuckDuckGoを利用している。それはJavaScriptを利用しなくても動作するからだ。

時々ixquick.comやGoogleを利用することもあるが、その際は個人情報を特定されないように細心の注意を払っている。

私は不便であるという理由で、あらゆるSNSを利用していない。これはこれらのサービスが全て非倫理的であるという理由でない。一部はそうで、一部はそうでない。SNSはそれぞれ違った利用規約を有しており、これはソフトウェアの配布にまつわる倫理的問題とは完全に異なる問題で、それらの間には大きな違いがある。

rmspostcommentsという名のTwitterアカウントがある。それは他のサイトにログインしてコメントを投稿する際に利用するものだ・Twitterには投稿しない。誰かがstallman_feedというアカウントを取得して政治的な記事の断片を投稿しているようだ。他のTwitterアカウントは全て私とは無関係だ

gnusocial.no 上で政治的な記事の断片を投稿しているアカウントがあるが、私が直接投稿しているわけではない。

この2つを除き、私は一切のソーシャルネットワークを利用していない。私のものだと称するものは全て偽物だ。

4chanには私は投稿しない。別にそれに反対しているというわけではないのだが。時々私だと自称する投稿があるそうだが、それは偽物だ

FacebookにもGoogle +にも私の名前を使ったアカウントがあるらしいが私ではない。

Facebookは利用の際に必ず1つの実名アカウントでログインする必要がある。つまり、すべての活動はひとまとめにされる。絶対に利用しない。

Facebookを利用すべきではない理由は複数ある。

Google+は実名での登録を推奨していたが、今はそうではないようだ。しかし、電話番号のような形式での確認はあるそうだ。

一方で、Google+には致命的な欠陥がある。それはノンフリーなJavaScriptで動作していることである。

Emailサービスを利用しないかと勧めてくる人がいる。しかし、2つの倫理的な問題点がある。

  • JavaScriptのようなノンフリーなソフトを利用しないといけないこと。
  • プライバシーへの懸念

前者についてはこのページを見て欲しい

後者については、検証のしようがないので、現時点ではメールサービスは推奨できないということになる。

しかし、検索エンジンと結びついたEメールサービスは利用すべきではない。それは背後でメールの内容が利用されて、検索結果に影響を与える可能性を排除できないからだ。

Copyright © 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2015 Richard Stallman