feature image

2024年12月11日 | ブログ記事

Nixで実行環境のライセンス違反を予防する話

この記事はアドベントカレンダー12日目の記事です。

ご挨拶

どうも、github-readme-statsのmost-used-languageをみたらNixが3番目になっていて驚いているComaviusです。本稿では、Nixとsbomnixを使って、サーバー上の実行環境の設定におけるライセンス違反を検出できるようにした話をします。

Nixって?

本題ではないので簡潔に、Nixについて説明をしようと思います。Nixは宣言的なパッケージマネージャーで、まずNix言語で書かれた依存関係の設定を評価し、その結果を用いてプログラムであったり環境であったりを作成することができるというツールです。詳しく知りたい場合はNix Reference Manual(英語)あるいはNix入門(日本語)を参照するとよいと思います。

本題-動機

サーバー上で何らかの依存関係を持つアプリを動かす際、AGPLライセンスが問題となることがあります。AGPLのもと公開されたものをサーバー上で動作させそれをAPI越しに提供すると、場合によっては派生物全体をAGPLで公開しなければならなくなります。モダンなエコシステムでは依存ライブラリの ライセンスを チェックする 機能を使うことができますが、環境に多くの言語/アプリケーションを導入する必要がある場合は、これらを統一的に使うことは難しいです。そのため、パッケージマネージャーのレイヤーで依存先のライセンスをチェックしたい、というのが今回の動機です。

本題-実装

大体のパッケージマネージャーでライセンスはメタデータとして提供されており、今回はNixpkgs(Nix公式によって提供されているパッケージマネージャー)のメタデータをsbomnixを用いてspdx形式に変換しました。spdx/tools-golangなどを使えばきちんと解析することもできそうですが、AGPLを弾ければ何でもよいのでsbom.spdx.jsonをgrepして済ませました。

総括

Nixがメインの環境に影響を与えずに環境をビルドしてくれるおかげで、仮想環境を立てたりせずに依存関係を調べることができ、実装はかなり楽でした。これを導入した結果、実際に2つのAGPLライセンスで公開されているライブラリを検出でき、リリース前に無事弾くことができました。しかし、Nixpkgsでメタデータが適切に設定されていないパッケージもあり、そのような場合はsbomnixでは検出できないため、この点が今後の課題です。

終わりに

apt show <package-name>でそのパッケージのライセンスを確認できるという記事を見たのですが、実際に叩いても出てこなくて困っています。このあたりご存じの方はご一報いただけるとありがたいです。

明日の担当は@show_nokiさんと@sent_pさんです。お楽しみに!


タイトル画像左側のNixのロゴはCC BY 4.0のもとで公開されています。

comavius icon
この記事を書いた人
comavius

algoとheurとLinux

この記事をシェア

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

関連する記事

2024年8月29日
クロスコンパイルRust
H1rono_K icon H1rono_K
2023年12月25日
オレオレRustプロジェクトテンプレート
H1rono_K icon H1rono_K
2023年12月18日
GPU側でレイヤーブレンドする絵描きソフトの同期方法
tq icon tq
2024年12月11日
最近参加したオフラインイベントについてまとめてみる
Pugma icon Pugma
2024年12月2日
【中国民族音楽作曲技法】①五声音階を認識しましょう
Natsuki icon Natsuki
2023年12月22日
rust-toolchain.tomlを書こう
H1rono_K icon H1rono_K
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記