Your SlideShare is downloading. ×
OSS開発勉強会-01
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

OSS開発勉強会-01

732
views

Published on

OSS開発勉強会-01

OSS開発勉強会-01

Published in: Technology, News & Politics

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
732
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. OSS開発勉強会-01 ~OSS開発ツールの使い方~ NEC OSS推進センター 海外浩平 <kaigai@ak.jp.nec.com>
  • 2. はじめに ▐ OSS開発勉強会の主旨・目的 OSS開発に関心を持つ社員の間で、組織横断的な情報交換/技術の 研鑽を行なう場を設定し、コミュニティ参加へのノウハウを共有する事で、 中長期的にはNECグループからOSSコミュニティへの参加・貢献を促進 する事を目指す。 <勉強会で行う事> 1. 対象となるOSSの技術的な理解を深める事 2. OSS開発コミュニティでの立ち回り方を共有 新機能やバグ修正など、パッチの投稿/議論の提起へつなげたい ▐ 背景 OSS開発コミュニティにおいて、NECの存在感が小さい 新機能/方向性の決定に対して影響力を行使する事ができず、 必要機能でも標準のパッケージに統合する事ができず…。 では、ごく一部の機能差分のために車輪の再発明を!?
  • 3. OSS開発コミュニティにおけるNECのプレゼンス ▐ Linux開発への日本企業の参入状況 富士通 … 1,007件 (1.5%) NTT … 445件 (0.7%) NEC … 圏外 (31位以降) (出典) The Linux Foundation: "Linux Kernel Development" ▐ 日本人の主要開発者 メンテナーと呼ばれる主要開発者が、 各サブシステムとそのコミュニティをまとめる コミュニティの方向性に強い影響を与える 富士通 … 2名 NTT … 2名 NTTデータ… 1名 SUSE … 1名 大学 … 1名 その他 … 3名 ※ NEC からの貢献分は圏外 :::: 0.7%432XenSource28 0.7%445Iinutronix27 0.7%445NTT26 0.8%494Atheros25 0.8%512Google24 :::: 1.5%992Academia11 1.5%1,007Fujitsu10 1.7%1,142Parallels9 2.3%1,480Consultant8 3.1%2,003Oracle7 4.2%2,765unknown6 6.0%3,923Intel5 6.1%4,021Novell4 6.3%4,150IBM3 12.0%7,897RedHat2 21.1%13,850None1 Percent of Total Num of changes CompanyRank Linux 2.6.24→2.6.30での企業毎のパッチ数 (The Linux Foundation調べ) NECは、サブシステムの メンテナーを勤める程には プレゼンスを発揮できてい ない。
  • 4. OSS開発モデル ▐ OSS開発コミュニティ 多様な背景を持つ人が、共通の目的(= ソフトウェア開発)に向かって 知恵を出し合い、議論を重ね、開発を進める。 最近では『オープンイノベーション』とも呼ばれる。 意見を述べ、パッチを投稿し、本流への統合を目指すことが重要 OSS開発 コミュニティ 企業A 企業B 個人 政府・研究機関等 ソースコード・リポジトリML Wiki
  • 5. NEC→コミュニティへの貢献の例 ▐ LinuxにおけるNUMA対応 NECはItanium2のcc-NUMA機(AsAmA)を製造・販売 NUMAでは、CPUとMemoryが近い距離にある事が重要 プロセスを特定ノードに関連付ける機能(CPU affinity)を開発、標準化 標準LinuxがNUMA上で最適な性能を発揮するように ▐ Big-SMP環境におけるSELinuxスケーラビリティ改善 アクセス制御ルールを参照する際に排他ロック Big-SMP環境ではロック競合が酷い事に RCUアルゴリズムを適用して、ロックレスで参照できるよう修正、標準化 CPU数に対して、システム性能がリニアスケール セキュリティ専門家と、HPC専門家が知恵を出し合って解決策を NUMA NODE Memory CPU CPU NUMA NODE Memory CPU CPU 速い 遅い
  • 6. 企業の目から見たOSS開発参加への意義 Japan Linux Symposium 2009: How to contribute to the Linux Kernel, and why it Makes Economic Sense? (James Bottomley)より引用 PPソフトの場合
  • 7. OSS開発ツールの使い方
  • 8. ソースコードを読む ▐ cscope Cのソースファイル(*.c, *.h), lex(*.l), yacc(*.y) のシンボルを スキャンし、特定のシンボルが使われている場所を提示できる。 検索できる項目 • Find this C symbol: • Find this global definition: • Find functions called by/calling this function: • Find this egrep pattern: • Find this file: • Find files #including this file: 便利な使い方 • lessとの組み合わせ • read-onlyなリポジトリ上で利用 ▐ その他 ctags, gtags … emacs上で利用するタグ付け
  • 9. リビジョン管理システム ▐ リビジョン管理システムとは ソースコードの変更履歴、差分を管理し、いつ/誰が/どんな変更を 加えたのか追跡できる仕組み OSSではコミュニティ管理の公開リポジトリを置くのが一般的 ▐ CVS 非常に由緒正しい仕組みだが、今から覚える必要性は疑問 ▐ Subversion 集中管理型 Apache, busyboxなど ▐ Git 分散型リビジョン管理システム Linux kernel, PostgreSQL, memcachedなど
  • 10. Subversion (1/2) ▐ CVSの改良版という位置付け リポジトリ全体をユニークに識別するリビジョン番号 ファイル操作と類似の直感的なコマンド体系 ▐ 集中管理型ゆえの制限 リポジトリのコミットには管理者の権限が必要 オリジナルに追従しつつ、野良リポジトリを管理するのが容易でない • 一時期の SE-PostgreSQL など :( リポジトリ チェックアウト ローカル コピー コミット 差分
  • 11. Subversion (2/2) ▐ 主なサブコマンド ▐ svn checkout (co) リポジトリからソースコードをチェックアウト ▐ svn commit 作業ディレクトリの内容をコミット ▐ svn diff (リビジョン間の)差分を表示 ▐ svn revert 作業ディレクトリ上の修正を取り消し ▐ svn add/move/remove ファイルの追加/名前変更/削除 ▐ svn copy/merge ブランチの作成/マージ
  • 12. Git (1/2) ▐ Linux開発のために設計された分散RCS 利用者はリポジトリ全体をローカルに複製 (clone) 修正はローカルにコミット可能。リモート側管理者の権限は必要なし。 本流のバージョンアップに追従するときは、差分を pull する 本流に統合するときは、差分を push する ▐ 分散管理型のメリット 複数のプロジェクトを同時並行的に進めることができる 必要に応じて他のリポジトリと pull/push を行なう • その典型が linux-next リポジトリ リポジトリ(リモート) リポジトリ(ローカル) git pull git push リポジトリのクローン(複製) git commit 差分
  • 13. Git (2/2) ▐ 基本的な使い方 1. git clone git://.... 本家のリポジトリをコピー 2. git branch my_devel ローカルブランチの作成 3. git checkout my_devel ローカルブランチに移動 4. vi hogehoge.c 自分の修正を行なう 5. git commit -a 修正をコミット 6. git diff master my_devel 本家との差分を diff で出力 ▐ アップストリームでも変更があった 1. git checkout master master ブランチに移動 2. git pull アップストリームの修正を取り込む 3. git branch my_devel my_devel ブランチに移動 4. git pull . master master ブランチの更新を取り込む
  • 14. 代表的なリポジトリサービス ▐ GitHub 最も著名なGitリポジトリ、OSS開発での利用は無料 Memcachedプロジェクトが利用 ▐ Google code SubversionとWiki、FTPディレクトリ SE-PostgreSQLの開発で使用 ▐ SourceForge.jp/.net Subversion/Gitに、Wiki、ML、sshアクセス ▐ Kernel.org/Postgresql.org Linux開発者/PostgreSQL開発者向け、コミュニティによる管理 開発中の機能などをホスティング
  • 15. パッチを作る/当てる、デバッグ ▐ diff 2つのファイル間の差分を出力する RCS管理下であれば、サブコマンドとして提供されている ▐ patch diffの出力をソースコードに適用する 差分/変更点を伝えるための(事実上の)共通フォーマット ▐ デバッガ gdb … アプリケーション用デバッガ gccの-gオプションで、バイナリのシンボル情報を埋め込める kgdb … Linux kernel 用デバッガ kdb … SGIによる IA-64/x86 向け built-in Linux kernelデバッガ
  • 16. Any Questions?

×