• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

OSS開発勉強会-01

on

  • 831 views

OSS開発勉強会-01

OSS開発勉強会-01

Statistics

Views

Total Views
831
Views on SlideShare
831
Embed Views
0

Actions

Likes
0
Downloads
4
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    OSS開発勉強会-01 OSS開発勉強会-01 Presentation Transcript

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