Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 13635] ファイルの概要

このコミットは、GoプロジェクトのAUTHORSファイルとCONTRIBUTORSファイルにAndrew Lutomirski氏を追加するものです。これは、彼がGoプロジェクトに貢献したコードが、特定の変更リスト(CL)の基礎となったことを示すものです。

コミット

commit 43c036bedc0e593481e5ffba4af68c30ed993793
Author: Ian Lance Taylor <iant@golang.org>
Date:   Wed Aug 15 14:44:17 2012 -0700

    A+C: Andrew Lutomirski (individual CLA)
    
    Wrote code that was the basis for
    https://golang.org/cl/6454046/
    
    R=golang-dev, r
    CC=golang-dev
    https://golang.org/cl/6450142

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/43c036bedc0e593481e5ffba4af68c30ed993793

元コミット内容

A+C: Andrew Lutomirski (individual CLA)

Wrote code that was the basis for
https://golang.org/cl/6454046/

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/6450142

変更の背景

このコミットの背景には、Andrew Lutomirski氏がGoプロジェクトにコード貢献を行ったという事実があります。オープンソースプロジェクトでは、貢献者がプロジェクトの公式な貢献者リストに記載されることが一般的です。これは、貢献を認識し、プロジェクトの透明性を高めるための慣行です。特に、AUTHORSファイルは著作権表示や貢献者のクレジットを管理するために使用され、CONTRIBUTORSファイルはプロジェクトに貢献した個人のリストを保持します。

コミットメッセージにあるA+C: Andrew Lutomirski (individual CLA)は、Andrew Lutomirski氏が個人のContributor License Agreement (CLA) に署名したことを示唆しています。CLAは、貢献者がそのコードをプロジェクトに提供する権利を持っていることを確認し、プロジェクトがそのコードを配布・利用する際の法的な明確性を確保するための重要な文書です。これにより、プロジェクトは将来的にライセンスに関する問題を回避できます。

また、Wrote code that was the basis for https://golang.org/cl/6454046/という記述は、Andrew氏が書いたコードが、Goのコードレビューシステム(Gerritベースのgolang.org/cl)における特定の変更リスト(CL 6454046)の基盤となったことを明確にしています。これは、彼の貢献が具体的なコード変更としてプロジェクトに統合されたことを意味します。

前提知識の解説

オープンソースプロジェクトにおける貢献者リスト

多くのオープンソースプロジェクトでは、プロジェクトのソースコードリポジトリ内にAUTHORSCONTRIBUTORSCREDITSといったファイルが存在します。これらのファイルは、プロジェクトの作成者、主要な開発者、およびコード、ドキュメント、翻訳、テスト、バグ報告など、様々な形でプロジェクトに貢献した人々をリストアップするために使用されます。

  • AUTHORSファイル: 主にプロジェクトの著作権者や主要な作者を記載します。法的な側面が強く、プロジェクトのライセンスと密接に関連している場合があります。
  • CONTRIBUTORSファイル: プロジェクトに何らかの形で貢献したすべての個人をリストアップします。これは、コードのコミットだけでなく、バグ報告、ドキュメントの改善、テストの作成、デザインの提供など、幅広い貢献を含みます。

これらのリストは、貢献者の努力を公に認め、コミュニティの感謝を示す重要な手段です。

Contributor License Agreement (CLA)

CLA(貢献者ライセンス同意書)は、オープンソースプロジェクトにおいて、貢献者がその貢献物(コード、ドキュメントなど)をプロジェクトに提供する際に署名する法的な文書です。CLAの主な目的は以下の通りです。

  1. ライセンスの明確化: 貢献されたコードがプロジェクトのライセンスの下で適切に利用・配布されることを保証します。これにより、プロジェクトは将来的な著作権侵害の訴訟リスクを軽減できます。
  2. 所有権の移転またはライセンス付与: CLAには、貢献されたコードの著作権をプロジェクトの所有者(例:財団、企業)に移転する条項、またはプロジェクトがそのコードを特定のライセンスの下で利用・配布することを許可する非独占的なライセンスを付与する条項が含まれることがあります。Goプロジェクトの場合、Googleがプロジェクトを管理しているため、Googleへのライセンス付与または著作権移転が関係している可能性があります。
  3. 貢献者の保護: 貢献者が自身の貢献物に対する権利を放棄するわけではなく、プロジェクトがその貢献物を適切に利用するための許可を与えるものです。

CLAは、特に企業が関与する大規模なオープンソースプロジェクトでよく見られます。GoプロジェクトもGoogleが主導しているため、CLAの導入は標準的なプラクティスです。

Goプロジェクトのコードレビューシステム (Gerrit)

Goプロジェクトは、コードレビューにGerritというシステムを使用しています。GerritはGitの上に構築されたWebベースのコードレビューツールで、変更がメインのコードベースにマージされる前に、複数の開発者によるレビューを強制するのに役立ちます。

  • 変更リスト (Change List, CL): Gerritでは、各提案された変更は「変更リスト」(CL)として扱われます。これは、Gitのコミットに似ていますが、レビュープロセスを経る前の段階のものです。
  • golang.org/cl/: GoプロジェクトのGerritインスタンスのURLプレフィックスです。https://golang.org/cl/6454046/は、特定の変更リストへのリンクを示しています。このリンクを訪れることで、Andrew Lutomirski氏のコードがどのようにレビューされ、最終的にプロジェクトに統合されたかを確認できます。

技術的詳細

このコミットの技術的詳細は、主にGitの差分(diff)によって示されるファイル内容の変更に集約されます。

AUTHORSファイルとCONTRIBUTORSファイルは、プレーンテキストファイルであり、各行に貢献者の名前とメールアドレスが記載されています。このコミットでは、Andrew Lutomirski氏のエントリがこれらのファイルに追加されています。

具体的には、以下の行が追加されています。

  • AUTHORSファイルに Andrew Lutomirski <andy@luto.us>
  • CONTRIBUTORSファイルに Andrew Lutomirski <andy@luto.us>

これらのファイルは、プロジェクトのビルドシステムやドキュメント生成プロセスによって直接使用されることは稀ですが、プロジェクトの公式な記録として、また法的な目的のために重要です。例えば、プロジェクトのライセンス情報や著作権表示を生成する際に参照されることがあります。

変更は非常に単純で、既存のリストに新しいエントリを挿入する形で行われています。これは、Gitのdiffコマンドの出力からも明らかです。index a0a36dc946..564d9ab21f 100644index 4cd94a9902..65cb56cba6 100644といった行は、Gitがファイルの変更を追跡するために使用する内部的なハッシュ値とファイルモードを示しています。100644は、ファイルが通常のファイルであり、読み取り/書き込み権限があることを示します。

コアとなるコードの変更箇所

diff --git a/AUTHORS b/AUTHORS
index a0a36dc946..564d9ab21f 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -21,6 +21,7 @@ Amir Mohammad Saied <amir@gluegadget.com>
 Amrut Joshi <amrut.joshi@gmail.com>
 Andrei Vieru <euvieru@gmail.com>
 Andrew Balholm <andybalholm@gmail.com>
+Andrew Lutomirski <andy@luto.us>
 Andrew Pritchard <awpritchard@gmail.com>
 Andrew Skiba <skibaa@gmail.com>
 Andrew Wilkins <axwalk@gmail.com>
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 4cd94a9902..65cb56cba6 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -49,6 +49,7 @@ Andrea Spadaccini <spadaccio@google.com>
 Andrei Vieru <euvieru@gmail.com>
 Andrew Balholm <andybalholm@gmail.com>
 Andrew Gerrand <adg@golang.org>
+Andrew Lutomirski <andy@luto.us>
 Andrew Pritchard <awpritchard@gmail.com>
 Andrew Skiba <skibaa@gmail.com>
 Andrew Wilkins <axwalk@gmail.com>

コアとなるコードの解説

上記の差分は、AUTHORSファイルとCONTRIBUTORSファイルに対する変更を示しています。

  • AUTHORSファイル:

    • @@ -21,6 +21,7 @@ は、変更が元のファイルの21行目から6行の範囲にあり、変更後には21行目から7行の範囲になることを示しています。つまり、1行が追加されたことを意味します。
    • +Andrew Lutomirski <andy@luto.us> の行が追加されています。これは、Andrew Lutomirski氏の名前とメールアドレスがAUTHORSリストに加わったことを示します。
  • CONTRIBUTORSファイル:

    • @@ -49,6 +49,7 @@ は、変更が元のファイルの49行目から6行の範囲にあり、変更後には49行目から7行の範囲になることを示しています。同様に、1行が追加されたことを意味します。
    • +Andrew Lutomirski <andy@luto.us> の行が追加されています。これは、Andrew Lutomirski氏の名前とメールアドレスがCONTRIBUTORSリストに加わったことを示します。

これらの変更は、Andrew Lutomirski氏がGoプロジェクトの正式な貢献者として認識され、その記録がプロジェクトのメタデータに反映されたことを意味します。これは、彼の貢献がプロジェクトの歴史の一部として永続的に記録されることを保証します。

関連リンク

参考にした情報源リンク

  • Git公式ドキュメント: Gitのdiffコマンドやコミットに関する一般的な情報。
  • Gerrit Code Review: Gerritの機能やワークフローに関する情報。
  • Contributor License Agreement (CLA) の一般的な情報: CLAの目的や重要性に関する一般的な解説。
  • Goプロジェクトの貢献ガイドライン: Goプロジェクトへの貢献方法やCLAに関する具体的な情報(もし公開されていれば)。
  • GitHubのコミットページ: コミットの差分表示や関連情報。
  • golang.org/cl/6454046/ の内容: Andrew Lutomirski氏の具体的な貢献内容を理解するために参照。

[インデックス 13635] ファイルの概要

このコミットは、GoプロジェクトのAUTHORSファイルとCONTRIBUTORSファイルにAndrew Lutomirski氏を追加するものです。これは、彼がGoプロジェクトに貢献したコードが、特定の変更リスト(CL)の基礎となったことを示すものです。

コミット

commit 43c036bedc0e593481e5ffba4af68c30ed993793
Author: Ian Lance Taylor <iant@golang.org>
Date:   Wed Aug 15 14:44:17 2012 -0700

    A+C: Andrew Lutomirski (individual CLA)
    
    Wrote code that was the basis for
    https://golang.org/cl/6454046/
    
    R=golang-dev, r
    CC=golang-dev
    https://golang.org/cl/6450142

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/43c036bedc0e593481e5ffba4af68c30ed993793

元コミット内容

A+C: Andrew Lutomirski (individual CLA)

Wrote code that was the basis for
https://golang.org/cl/6454046/

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/6450142

変更の背景

このコミットの背景には、Andrew Lutomirski氏がGoプロジェクトにコード貢献を行ったという事実があります。オープンソースプロジェクトでは、貢献者がプロジェクトの公式な貢献者リストに記載されることが一般的です。これは、貢献を認識し、プロジェクトの透明性を高めるための慣行です。特に、AUTHORSファイルは著作権表示や貢献者のクレジットを管理するために使用され、CONTRIBUTORSファイルはプロジェクトに貢献した個人のリストを保持します。

コミットメッセージにあるA+C: Andrew Lutomirski (individual CLA)は、Andrew Lutomirski氏が個人のContributor License Agreement (CLA) に署名したことを示唆しています。CLAは、貢献者がそのコードをプロジェクトに提供する権利を持っていることを確認し、プロジェクトがそのコードを配布・利用する際の法的な明確性を確保するための重要な文書です。これにより、プロジェクトは将来的にライセンスに関する問題を回避できます。

また、Wrote code that was the basis for https://golang.org/cl/6454046/という記述は、Andrew氏が書いたコードが、Goのコードレビューシステム(Gerritベースのgolang.org/cl)における特定の変更リスト(CL 6454046)の基盤となったことを明確にしています。このCL 6454046は「runtime: stop using vsyscall page on Linux」というタイトルで、Linux上でのvsyscallページの使用を停止し、起動時にauxvvdsoを解析することを目的としたものでした。これは、彼の貢献が具体的なコード変更としてプロジェクトに統合されたことを意味します。

前提知識の解説

オープンソースプロジェクトにおける貢献者リスト

多くのオープンソースプロジェクトでは、プロジェクトのソースコードリポジトリ内にAUTHORSCONTRIBUTORSCREDITSといったファイルが存在します。これらのファイルは、プロジェクトの作成者、主要な開発者、およびコード、ドキュメント、翻訳、テスト、バグ報告など、様々な形でプロジェクトに貢献した人々をリストアップするために使用されます。

  • AUTHORSファイル: 主にプロジェクトの著作権者や主要な作者を記載します。法的な側面が強く、プロジェクトのライセンスと密接に関連している場合があります。
  • CONTRIBUTORSファイル: プロジェクトに何らかの形で貢献したすべての個人をリストアップします。これは、コードのコミットだけでなく、バグ報告、ドキュメントの改善、テストの作成、デザインの提供など、幅広い貢献を含みます。

これらのリストは、貢献者の努力を公に認め、コミュニティの感謝を示す重要な手段です。

Contributor License Agreement (CLA)

CLA(貢献者ライセンス同意書)は、オープンソースプロジェクトにおいて、貢献者がその貢献物(コード、ドキュメントなど)をプロジェクトに提供する際に署名する法的な文書です。CLAの主な目的は以下の通りです。

  1. ライセンスの明確化: 貢献されたコードがプロジェクトのライセンスの下で適切に利用・配布されることを保証します。これにより、プロジェクトは将来的な著作権侵害の訴訟リスクを軽減できます。
  2. 所有権の移転またはライセンス付与: CLAには、貢献されたコードの著作権をプロジェクトの所有者(例:財団、企業)に移転する条項、またはプロジェクトがそのコードを特定のライセンスの下で利用・配布することを許可する非独占的なライセンスを付与する条項が含まれることがあります。Goプロジェクトの場合、Googleがプロジェクトを管理しているため、Googleへのライセンス付与または著作権移転が関係している可能性があります。
  3. 貢献者の保護: 貢献者が自身の貢献物に対する権利を放棄するわけではなく、プロジェクトがその貢献物を適切に利用するための許可を与えるものです。

CLAは、特に企業が関与する大規模なオープンソースプロジェクトでよく見られます。GoプロジェクトもGoogleが主導しているため、CLAの導入は標準的なプラクティスです。

Goプロジェクトのコードレビューシステム (Gerrit)

Goプロジェクトは、コードレビューにGerritというシステムを使用しています。GerritはGitの上に構築されたWebベースのコードレビューツールで、変更がメインのコードベースにマージされる前に、複数の開発者によるレビューを強制するのに役立ちます。

  • 変更リスト (Change List, CL): Gerritでは、各提案された変更は「変更リスト」(CL)として扱われます。これは、Gitのコミットに似ていますが、レビュープロセスを経る前の段階のものです。
  • golang.org/cl/: GoプロジェクトのGerritインスタンスのURLプレフィックスです。https://golang.org/cl/6454046/は、特定の変更リストへのリンクを示しています。このリンクを訪れることで、Andrew Lutomirski氏のコードがどのようにレビューされ、最終的にプロジェクトに統合されたかを確認できます。

Linuxカーネルにおけるvsyscallとvdso

Andrew Lutomirski氏の貢献の基礎となったCL 6454046のタイトル「runtime: stop using vsyscall page on Linux」は、Linuxカーネルの特定のメカニズムに関連しています。

  • vsyscall (Virtual System Call): 過去のLinuxカーネルで採用されていた、ユーザー空間のプログラムがシステムコールを高速に実行するためのメカニズムの一つです。特定のシステムコール(例:gettimeofday)を、カーネルモードへの切り替えなしにユーザー空間から直接実行できるように、カーネルがユーザー空間にマッピングするページです。しかし、セキュリティ上の問題(ASLRとの相性など)や、より柔軟なvdsoの登場により、その使用は非推奨となり、最終的には廃止されました。
  • vdso (Virtual Dynamic Shared Object): vsyscallの後継として導入された、より安全で柔軟なメカニズムです。カーネルがユーザー空間にマッピングする共有ライブラリのようなもので、gettimeofdayなどの特定のシステムコールをユーザー空間から直接呼び出すための関数を提供します。vdsoは動的にロードされ、ASLR(Address Space Layout Randomization)と互換性があり、セキュリティが向上しています。
  • auxv (Auxiliary Vector): プロセスが起動する際に、カーネルがユーザー空間に渡す情報の一つです。これには、vdsoのベースアドレスなど、実行環境に関する様々な情報が含まれています。

Andrew Lutomirski氏の貢献は、GoランタイムがLinux上でvsyscallページに依存するのをやめ、より現代的で安全なvdsoauxvのメカニズムを利用するように変更することを目指していたと考えられます。これにより、Goプログラムのセキュリティと互換性が向上します。

技術的詳細

このコミットの技術的詳細は、主にGitの差分(diff)によって示されるファイル内容の変更に集約されます。

AUTHORSファイルとCONTRIBUTORSファイルは、プレーンテキストファイルであり、各行に貢献者の名前とメールアドレスが記載されています。このコミットでは、Andrew Lutomirski氏のエントリがこれらのファイルに追加されています。

具体的には、以下の行が追加されています。

  • AUTHORSファイルに Andrew Lutomirski <andy@luto.us>
  • CONTRIBUTORSファイルに Andrew Lutomirski <andy@luto.us>

これらのファイルは、プロジェクトのビルドシステムやドキュメント生成プロセスによって直接使用されることは稀ですが、プロジェクトの公式な記録として、また法的な目的のために重要です。例えば、プロジェクトのライセンス情報や著作権表示を生成する際に参照されることがあります。

変更は非常に単純で、既存のリストに新しいエントリを挿入する形で行われています。これは、Gitのdiffコマンドの出力からも明らかです。index a0a36dc946..564d9ab21f 100644index 4cd94a9902..65cb56cba6 100644といった行は、Gitがファイルの変更を追跡するために使用する内部的なハッシュ値とファイルモードを示しています。100644は、ファイルが通常のファイルであり、読み取り/書き込み権限があることを示します。

Andrew Lutomirski氏の具体的な貢献は、GoランタイムがLinuxのvsyscallページの使用を停止し、代わりにauxvvdsoを解析するようにするコードでした。これは、GoプログラムがLinuxカーネルとのインタラクションをより効率的かつ安全に行うための重要な改善であり、Goのクロスプラットフォーム対応とパフォーマンス最適化の一環として位置づけられます。

コアとなるコードの変更箇所

diff --git a/AUTHORS b/AUTHORS
index a0a36dc946..564d9ab21f 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -21,6 +21,7 @@ Amir Mohammad Saied <amir@gluegadget.com>
 Amrut Joshi <amrut. Joshi@gmail.com>
 Andrei Vieru <euvieru@gmail.com>
 Andrew Balholm <andybalholm@gmail.com>
+Andrew Lutomirski <andy@luto.us>
 Andrew Pritchard <awpritchard@gmail.com>
 Andrew Skiba <skibaa@gmail.com>
 Andrew Wilkins <axwalk@gmail.com>
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 4cd94a9902..65cb56cba6 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -49,6 +49,7 @@ Andrea Spadaccini <spadaccio@google.com>
 Andrei Vieru <euvieru@gmail.com>
 Andrew Balholm <andybalholm@gmail.com>
 Andrew Gerrand <adg@golang.org>
+Andrew Lutomirski <andy@luto.us>
 Andrew Pritchard <awpritchard@gmail.com>
 Andrew Skiba <skibaa@gmail.com>
 Andrew Wilkins <axwalk@gmail.com>

コアとなるコードの解説

上記の差分は、AUTHORSファイルとCONTRIBUTORSファイルに対する変更を示しています。

  • AUTHORSファイル:

    • @@ -21,6 +21,7 @@ は、変更が元のファイルの21行目から6行の範囲にあり、変更後には21行目から7行の範囲になることを示しています。つまり、1行が追加されたことを意味します。
    • +Andrew Lutomirski <andy@luto.us> の行が追加されています。これは、Andrew Lutomirski氏の名前とメールアドレスがAUTHORSリストに加わったことを示します。
  • CONTRIBUTORSファイル:

    • @@ -49,6 +49,7 @@ は、変更が元のファイルの49行目から6行の範囲にあり、変更後には49行目から7行の範囲になることを示しています。同様に、1行が追加されたことを意味します。
    • +Andrew Lutomirski <andy@luto.us> の行が追加されています。これは、Andrew Lutomirski氏の名前とメールアドレスがCONTRIBUTORSリストに加わったことを示します。

これらの変更は、Andrew Lutomirski氏がGoプロジェクトの正式な貢献者として認識され、その記録がプロジェクトのメタデータに反映されたことを意味します。これは、彼の貢献がプロジェクトの歴史の一部として永続的に記録されることを保証します。

関連リンク

参考にした情報源リンク

  • Git公式ドキュメント: Gitのdiffコマンドやコミットに関する一般的な情報。
  • Gerrit Code Review: Gerritの機能やワークフローに関する情報。
  • Contributor License Agreement (CLA) の一般的な情報: CLAの目的や重要性に関する一般的な解説。
  • Goプロジェクトの貢献ガイドライン: Goプロジェクトへの貢献方法やCLAに関する具体的な情報(もし公開されていれば)。
  • GitHubのコミットページ: コミットの差分表示や関連情報。
  • golang.org/cl/6454046/ の内容に関するGitHub Issue: https://github.com/golang/go/issues/4601 (CL 6454046の背景にある議論や状態に関する情報)
  • Linux vsyscall and vdso: Linuxカーネルにおけるvsyscallvdsoのメカニズムに関する技術文書や解説記事。