検索
ホームページシステムチュートリアルLinuxLinuxの父がついに説得:30年前のLinuxカーネルC言語はC11にアップグレードされる

Linuxの父がついに説得:30年前のLinuxカーネルC言語はC11にアップグレードされる

Feb 14, 2024 pm 09:36 PM
linuxLinuxチュートリアルLinuxシステムLinuxコマンドシェルスクリプトLinux を始めるLinux学習

最近嬉しいニュースがありましたが、これまで使用されてきた C 言語 Linux カーネルの 1989 年版がついにメジャーアップグレードされたということです。現代テクノロジーのペースは止まらず、本日、Linux オープンソース コミュニティは、カーネルの C 言語バージョンを C11 標準にアップグレードするという驚くべき計画を発表しました。この大規模な改革は、来る 5 月の Linux バージョン 5.18 以降に施行される予定です。この重要な動きは、Linux カーネルに無限の潜在的な機会をもたらし、Linux カーネルが最新のテクノロジーのニーズによりよく適応できるようにするでしょう。

この決定は突然でした。質問を開始してから公式声明が発表されるまで、わずか 1 週間しかかかりませんでした。Linux の頑固な父である Linus Torvalds を説得するのは簡単ではありません。事の原因はちょっとした偶然のようだ。 Linux 之父终于被劝动:用了 30 年的 Linux 内核 C 语言将升级至 C11

バグの連鎖反応

問題の原因は、先週の Linux コミュニティのディスカッションにあります。

Jakob Koschel という博士課程の学生は、カーネルのリンク リスト プリミティブに関連する予測実行の脆弱性の防止を研究しているときに、このような問題を発見しました。

Linux カーネルは、struct list_head で定義された二重リンク リストを広範囲に使用します

: リーリー この構造は通常、他の構造内に埋め込まれます。このようにして、関連する構造タイプを使用してリンク リストを作成できます。

さらに、カーネルは、リンク リストの走査と操作に使用できる多数の関数とマクロも提供します。 list_for_each_entry () はその 1 つで、制御構造を装ったマクロです。問題はこのマクロにあります。カーネルに次の構造が含まれていると仮定します:

リーリー

list の要素を使用して、foo 構造体の二重リンクリストを作成できます。このようなリンク リストの先頭として宣言された foo_list という構造体があるとします。このリンク リストは次のコードを使用して走査できます:

リーリー

list 引数は、foo 構造内の list_head 構造の名前をマクロに伝えます。このループは、リスト内の要素ごとに 1 回実行され、反復子はその要素を指します。これにより、USB サブシステムにバグが発生しました。マクロに渡されたイテレータは、マクロの終了後も使用できる可能性がありました。

これは危険なことなので、Koschel はループ後の反復子の使用を停止することでバグを修正する修正を提出しました。

Linux 之父终于被劝动:用了 30 年的 Linux 内核 C 语言将升级至 C11ライナスを説得する

しかし、Linus Torvalds 自身はこのパッチをあまり気に入っておらず、予測される実行の脆弱性との関係を理解し​​ていません。 Koschel 氏が詳細に説明した後、Linus 氏はそれが単なる一般的なバグであることを認めました。

しかし、物事はそれほど単純ではありませんでした。Linus はすぐに真の根本原因に気づきました。リンク リスト トラバーサル マクロに渡されるイテレータは、ループ自体の外側のスコープで宣言する必要があるということです。この予測不能なバグは、C89 には「ループ内の変数の宣言」がないために発生します。

list_for_each_entry () のようなマクロは、基本的に常に最後の HEAD エントリをループの外にリークします。これは単純に、ループ自体でイテレータ変数を宣言できないためです。

自分自身を宣言できるイテレータ リスト トラバーサル マクロを作成できれば、イテレータはループの外側には表示されず、そのような問題は発生しません。ただし、カーネルは C89 標準に準拠しているため、ループ内で変数を宣言できません。

Linus は決断したので、アップグレードしましょう。C99 標準に移行する時期が来たのかもしれません。これも 20 年以上前のものですが、少なくとも C89 よりは新しく、ループ内で変数を宣言できます。

C89 は非常に古いものですが、なぜ何年も経っても変わらないのでしょうか? Linus 氏は、古い gcc コンパイラーのバージョンの一部で奇妙な問題が発生し、気軽にアップグレードできないためだと述べました。

ただし、現在、Linux カーネルは gcc の最小要件をバージョン 5.1 に引き上げているため、過去の奇妙なバグはもう存在しないはずです。 Linux 之父终于被劝动:用了 30 年的 Linux 内核 C 语言将升级至 C11

もう 1 人のコア開発者である Arnd Bergmann は、C11 以上に確実にアップグレードできると信じています。ただし、C17 または C2x にアップグレードすると gcc-5/6/7 のサポートが終了するため、C11 にアップグレードする方が簡単です。

最終的に、Torvalds 氏はこのアイデアに同意しました:「わかりました、思い出してください。5.18 マージ ウィンドウの早い段階で試してみましょう。」次の C11 への移行はいくつかの予期せぬバグを引き起こす可能性がありますが、すべてがうまくいけば、次は A Linux カーネルのバージョンは正式に C11 に移行します。

以上がLinuxの父がついに説得:30年前のLinuxカーネルC言語はC11にアップグレードされるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は良许Linux教程网で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Linux操作とは何ですか?Linux操作とは何ですか?Apr 13, 2025 am 12:20 AM

Linuxオペレーティングシステムのコアは、コマンドラインインターフェイスで、コマンドラインを介してさまざまな操作を実行できます。 1.ファイルおよびディレクトリ操作は、ファイルとディレクトリを管理するために、LS、CD、MKDIR、RM、その他のコマンドを使用します。 2。ユーザーおよび許可管理は、useradd、passwd、chmod、その他のコマンドを介してシステムのセキュリティとリソースの割り当てを保証します。 3。プロセス管理は、PS、Kill、およびその他のコマンドを使用して、システムプロセスを監視および制御します。 4。ネットワーク操作には、Ping、Ifconfig、SSH、およびネットワーク接続を構成および管理するためのその他のコマンドが含まれます。 5.システムの監視とメンテナンスは、TOP、DF、DUなどのコマンドを使用して、システムの動作ステータスとリソースの使用を理解します。

Linuxエイリアスを使用したカスタムコマンドショートカットで生産性を高めますLinuxエイリアスを使用したカスタムコマンドショートカットで生産性を高めますApr 12, 2025 am 11:43 AM

導入 Linuxは、柔軟性と効率性により、開発者、システム管理者、およびパワーユーザーが好む強力なオペレーティングシステムです。しかし、頻繁に長く複雑なコマンドを使用することは退屈でERです

Linuxは実際に何に適していますか?Linuxは実際に何に適していますか?Apr 12, 2025 am 12:20 AM

Linuxは、サーバー、開発環境、埋め込みシステムに適しています。 1.サーバーオペレーティングシステムとして、Linuxは安定して効率的であり、多くの場合、高電流アプリケーションの展開に使用されます。 2。開発環境として、Linuxは効率的なコマンドラインツールとパッケージ管理システムを提供して、開発効率を向上させます。 3.埋め込まれたシステムでは、Linuxは軽量でカスタマイズ可能で、リソースが限られている環境に適しています。

Linuxで倫理的ハッキングを習得するための必須ツールとフレームワークLinuxで倫理的ハッキングを習得するための必須ツールとフレームワークApr 11, 2025 am 09:11 AM

はじめに:Linuxベースの倫理的ハッキングでデジタルフロンティアを保護します ますます相互に接続されている世界では、サイバーセキュリティが最重要です。 倫理的なハッキングと浸透テストは、脆弱性を積極的に特定し、緩和するために不可欠です

Linuxの基本を学ぶ方法は?Linuxの基本を学ぶ方法は?Apr 10, 2025 am 09:32 AM

基本的なLinux学習の方法は次のとおりです。1。ファイルシステムとコマンドラインインターフェイス、2。LS、CD、MKDIR、3。ファイルの作成と編集などのファイル操作を学習するマスター基本コマンド、4。

Linuxの最も使用は何ですか?Linuxの最も使用は何ですか?Apr 09, 2025 am 12:02 AM

Linuxは、サーバー、組み込みシステム、デスクトップ環境で広く使用されています。 1)サーバーフィールドでは、Linuxは、その安定性とセキュリティにより、Webサイト、データベース、アプリケーションをホストするための理想的な選択肢となっています。 2)埋め込みシステムでは、Linuxは高いカスタマイズと効率で人気があります。 3)デスクトップ環境では、Linuxはさまざまなユーザーのニーズを満たすために、さまざまなデスクトップ環境を提供します。

Linuxの欠点は何ですか?Linuxの欠点は何ですか?Apr 08, 2025 am 12:01 AM

Linuxの欠点には、ユーザーエクスペリエンス、ソフトウェア互換性、ハードウェアサポート、学習曲線が含まれます。 1.ユーザーエクスペリエンスは、WindowsやMacOほどフレンドリーではなく、コマンドラインインターフェイスに依存しています。 2。ソフトウェアの互換性は他のシステムほど良くなく、多くの商用ソフトウェアのネイティブバージョンがありません。 3.ハードウェアサポートはWindowsほど包括的ではなく、ドライバーは手動でコンパイルされる場合があります。 4.学習曲線は急で、コマンドラインの操作をマスターするには時間と忍耐が必要です。

Linuxは学ぶのが難しいですか?Linuxは学ぶのが難しいですか?Apr 07, 2025 am 12:01 AM

linuxisnothardtolearn、butthedifficultydependsonyourbackgroundandgoals.forthosewithosexperience、特にcommand-llinefamparsition、linuxisaneasyytransition.beginnersmayteeper relearningcurvebutcanagewithpersources.linux'sopen-sourcenature

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)