
私は、互換性のない「パブリックAPI」の変更が発生したときにメジャーバージョン番号を変更する必要があるという意味のあるバージョン管理を理解したいと思います。私の思考実験は、Linuxカーネル番号が何であるかを理解しようとすることでした。私が知る限り、メジャーバージョンのアップグレードはランダムだからです。
私はLinuxの内部に慣れていないので、ご了承ください。私が理解したのは、この「パブリックAPI」は次sys_write
のCシステムコールのセットになることです。sys_mmap
バイナリ互換性を決定するために使用されるABI。 ~からシステムコール_64.tblこれには約400のシステムコールが含まれ、その一部は廃止されました。それともここにリストされているすべてがAPIですか?カーネルAPI?
システムコール定義を想定すると、Linuxがシステムコールインターフェイスに以前のバージョンと互換性のない変更を導入したことがありますか?それでは、メジャーバージョン番号は何百または数千になるのでしょうか?
答え1
明確にするために、カーネルはセマンティックバージョン管理に従わないことに言及する価値があります。主な障害物は任意です。
システムコールに関して互換性のない変更、つまり削除が発生しました。マニュアルsyscalls
ページ削除された未使用の呼び出しを一覧表示します。これだけでもnon-1を要求するのに十分です。Xセマンティックバージョン管理ルールが適用される場合のバージョン番号。
カーネルAPIではなく、カーネルに残る必要があるのは、変更された場合にプログラムを破壊する可能性があるすべてです。これには、システムコールの定義だけでなく、データ構造、/proc
ファイル名と内容、ioctl
呼び出し、さらにはシステムの動作も含まれます。カーネルAPIは意図せずに変更されることがよくあり、これらの変更は通常戻ります(したがって、欠落している主な変更として処理され、次にセマンティクスバージョン管理で変更されます)。