このエントリーをはてなブックマークに追加

筑波大学システム情報系准教授 新城靖さんインタビュー

今回は、筑波大学システム情報系准教授新城靖さんにインタビューさせて頂きました。分散型オペレーティングシステムや、その技術を応用した分散型SNSの研究についてお話しを伺いました。

新城先生の研究室で行われている研究の概要を教えてください。

大きく分けて2つあります。1つはオペレーティングシステムのカーネル関係、仮想計算機の研究をしておりまして、新しい仮想計算機を作ろうとしています。もう1つはだいぶ毛色が違うのですが、分散型ソーシャルネットワーキングサービスの研究をしています。

これら2つの研究は全く異なるように見えますが、基本部分は同じです。1996年の着任時から一貫してオペレーティングシステムの研究をしています。カーネルや仮想計算機はオペレーティングシステムの中心部分なのでこれは継続して研究していますが、もうひとつ、オペレーティングシステムの中には、分散型オペレーティングシステムというものがあります。

分散型オペレーティングシステムの研究は1985年~90年にかけて盛んに行われていました。その頃から勉強していたので、分散型オペレーティングシステムに対する憧れを持っており、非常に難しくてなかなか実装できないのですが、いつかきちんとしたものを作りたいと思って取り組んでいます。

現在、ウェブブラウザの中では様々なアプリケーションが動いています。もはや単なるブラウザというよりは、アプリケーションが動くプラットフォームになっているので、ブラウザがオペレーティングシステムそのものなのです。複数のウェブブラウザをうまくつないで、分散型オペレーティングシステムを作りたいと考えています。このシステムは複数人でつかうわけですから、結果的にソーシャルネットワーキングと同じことになります。ですので「分散型ソーシャルネットワーキングサービスの研究をしています」といっていますが、分散型オペレーティングシステムを作っているのと同じことなのです。

通常、オペレーティングシステムと、ブラウザのレイヤーがそれぞれあり、ブラウザのレイヤーにSNSがあるという認識があるのですが、分散型オペレーティングシステムといった場合には、オペレーティングシステムレイヤーを指しているのでしょうか。

オペレーティングシステムレイヤーで分散型システムをサポートすることになりますので、オペレーティングシステムレイヤーを指しています。

コンピュータが10台100台あったとしても、利用者が資源やファイルの所在を全く意識しなくても自由に使える、コンピュータのノードの数に関わらず簡単に使えるようにする。これが分散型オペレーティングシステムの目指すところです。

最近は分散型オペレーティングシステムの研究はそれほど盛んではないため、学会に参加してもそういった発表はなかなかありません。しかし実用という意味では、身近な技術となっています。

例えば、マッキントッシュの中のMach(マイクロカーネル)は、分散型オペレーティングシステムの研究の結果得られた技術です。iOSも同じで、プロセス間通信の技術などといった、分散型オペレーティングシステムの技術が1台のコンピュータの中で使われている一例です。

研究室の学生が取り組んでいる研究内容について教えてください

現在研究中のテーマとしては大きく「オペレーティングシステム、仮想化技術」「分散システム」「コンピュータネットワーク運用・管理」「言語処理」に分かれます。複数の教員がそれぞれの得意分野を生かして担当しています。

「分散システム」というテーマで、「ソーシャル SQL データベースの実装と応用」という研究をされているようですが、ソーシャルSQLデータベースとは具体的にどのようなものなのでしょうか。

これは先程の分散型SNSの一種です。集中型のSNS例えばフェイスブックの場合は、フェイスブックの会社の中にデータベースがあって、そこに全てのデータが保存されています。それに対してこのソーシャルSQLデータベースというのは、それぞれの個人のPCでSQLのサーバが動く形になります。自分のPCから友達のSQLサーバへ接続し、友達のツイッターを表示するといったアプリケーションが一例です。

データベースには、MySQLを使っています。MySQLをそれぞれローカルのPCで動かし、友達のPCとの間はVPNでつなぎます。VPNでつなぐときにユーザー認証がいります。それにも様々なやり方がありますが、今はフェイスブックを使っています。フェイスブックのアプリケーションを動かしておいて、そこでOAuthで認証すると友達につながるという形です。フェイスブックだけでなくツイッターなども原理は同じです。

その時、使うVPNも何種類かあるのですが、今年の学生はSoftEther VPNというのを使っています。SoftEther VPNは、筑波大学の博士課程の学生である登 大遊が開発したオープンソースのVPNです。会社の「サービス」としては、PacketiX VPN という別ブランドを使っていま す。研究で使っているのは、主にオープンソースの方です。

研究室には、4年生から入ってこられるのですね。

4年生で入って1年で出るより、4年生で入って修士課程の卒業までいる学生が多いです。
毎年6人募集していますが、年によって変動があります。ネットワーク系の研究に興味を持って入ってくる学生が多いです。普段大学の中でネットワークを使っていることもあってか、それを使った研究ができるということで人気があります。ネットワークに興味を持っている学生に、分散型SNSも面白いよ、と勧誘したりします。勿論OSのカーネルをやりたいという学生も集まってきます。

研究室で使用する言語や作成するアプリケーションなどを教えてください。

カーネルのプログラムはC言語です。ソーシャルネットワークで流行っているのはRuby言語。あとウェブブラウザでプログラム書く場合はJavaScriptになります。

アプリケーションについてはOSの研究室なので余り無いのですが、先ほどのウェブブラウザで動くツイッターが一例です。それ以外に協調型ウェブブラウジングという、2つのブラウザがあり、一方を操作すると他方も連動して動く、という既存の技術があるのですが、ブラウザ間通信ができる分散型ウェブブラウザを活用して、協調型ウェブブラウジングを作ってもらったりもしました。

このブラウザには、Firefoxに拡張機能(addon)とプラグインを追加して使用します。通信はフェイスブックを使うこともありますし、以前はSkypeを使っていました。あとXMPPのサーバについても、独自のものでもいいですし、フェイスブックやgoogleのものを使うことも可能です。

研究室に入ってくる前の学生に対してはどんな授業をされていますか。

特に3年生向けにはシステムプログラムという授業を持っています。システムコードを使ったプログラミングです。教員2人で行っていまして、前半はファイル、タイマーというような内容で、後半はネットワークのプログラミングです。私はネットワークを担当しています。その授業をとった学生は、「新城先生はこういうものか」という印象を持ってくれていると思います。

オペレーティングシステムという授業もありますが、筑波大学にはオペレーティングシステム専門の教員が何人もいるので、Ⅰは別の教員がやっています。私はオペレーティングシステムⅡを担当しています。

ⅡはLinuxカーネルを教材にしながらオペレーティングシステムⅠと同じ内容を行います。例えば、プロセスであればLinuxカーネルのプロセスはタスクストラクトで作られていますよとか、仮想系メモリであればMMUをこうやってセットしているのですよといったように、Ⅰでやった内容を、Linuxを使って実際説明しています。ただこれは学期の関係上、卒業研究の配属が決まった後にやることになっていますので、あまり卒業研究生を集める効果はなさそうです。

学生のレベルについて感じること、1996年からいらっしゃるので昔と比べてどうかということの2点についてお聞かせください。

授業に1回も出てこないでレポートだけ出してくる場合があります。プログラムが問題なければまだよいのですが、結構難しいようで、バッファオーバーフローとかメモリーリークのあるプログラムを出してくるので指摘して再提出させ鍛えています。普通の学生は1~2回再提出します。レポートを10個出さないといけないので途中であきらめてしまう学生もいますが、最後までいけばそれなりに鍛えられると思います。

コンピュータの中で何が起きているのか、というイメージを持って欲しいと思って教えています。オーバーフローですと、コンピュータの中にメモリがあって、そこが意図したものより増えて、スタックを破壊するのですが、そういうイメージを持っていれば、バッファオーバーフローが起きないプログラムを自然と書けるようになるのです。メモリがどこにあるのかというイメージをつかみながらプログラムを書いて欲しい、それがシステムプログラムという授業の狙いです。
質的な問題でいうと、レポートの問題は前より易しくしています 長期的にはレベルがやや下がっている感じがします。

レベルが下がっている理由としては、学校に来ない学生が増えていることも原因の一つかもしれません。学校に来ない学生には2種類あって、トップの学生で、学校に来ず会社をやっていたりするケースと、家で一人でプログラムを書いているケースがあります。後者の場合、何か困ったことがあるとgoogleプログラミングになります。つまり関数名をgoogleに入れて、出てきたコードを見ながら作成する。動く例題を探してきてそれを少し修正する。これは学校に来てやるより効率が悪いんです。学校にきて教員やTAに聞くとすぐに教えてもらえるようなものを自分で調べると1時間2時間かかってしまう。更に1時間2時間かけて調べて真似したコードが、バッファオーバーフローなどの問題を含んだコードである可能性もある。でもその学生にはそれがわからない。昔はそもそもgoogleもなかったので、大学にいって教員に聞き、それで勉強してできるようになったのですが、今はこういったものがかえってあるがために、それでプログラムが作れると学生が思っていることを危惧しています。

授業にくる学生には、「検索するな、検索するより教員かTAに聞いてください。その方がずっと早いですから」と、毎回毎回伝えていますが、学生は「人に聞く」ということに慣れていないので難しいようです。「人に聞く」ことも訓練する必要があります。

トップ層の学生は自身の技術をつかって会社をやっていて学校に来ないということですが、そこに関して何かありますか。

そういう人に対してのサポートは大学としては弱いと思っています。単位が取れなくて卒業できないとか、プログラミングはすごくできるのですが、数学の解析ができなくて非常に苦労するというケースがあったりします。たとえば、解析は免除するなど、カリキュラムを見直さないといけない時代にきているのではないかと思います。

数学の解析とプログラミングは割と相関がないどころか、むしろ負の相関があるのではないかとも思いますので。時代に合わせて大学の教え方や卒業の認定を変えていかないといけないのでしょうが、まだそこまで追いついていないのが現状です。

最後に、授業のカリキュラムに対する提言などあればぜひお願いします。

学生は皆個人で違うので、個人ごとに特化したサービスを提供することが理想です。トップの学生にはトップに合わせたサービスを、普通の学生には標準的なものを。なかなかプログラミングができない学生には別のものをというように、それぞれの学生に合わせて柔軟なカリキュラムを大学として用意できたらいいなと思います。

さらに、先ほどの話は教える方の理想でしたが、学生ももっと積極的に、自分にとって何が一番いいのかを考え、自分にとっていいサービスを大学からうけるために、積極的に大学に働きかけて欲しいのです。残念ながら今多いのは、「大学はもういい。行くのが面倒だから家にいる」という学生ですが、それは授業料を考えても大変勿体無いことです。もっと発信してくれればこちらも考えて対応したいと思っています。

おすすめの記事