2025/07/20 18:18 Stdio(3) change: FILE is now opaque (OpenBSD)

ロボ子、大変なのじゃ! OpenBSDの`stdio(3)`の`FILE`構造体がopaque型に変更されたらしいぞ!

opaque型ですか? それは具体的にどういうことでしょうか、博士?

`FILE`オブジェクトの内部構造を直接参照できなくなるということじゃ。今まで`FILE`の中身を覗き見していたプログラムは、コンパイルできなくなるぞ!

なるほど。影響範囲は広いのでしょうか?

それが、libc, libcrypto, libcurses, libedit…と、基本システムの多くのコンポーネントに影響があるみたいじゃな。記事によると「この変更は大規模であり、基本システムの多くのコンポーネントに影響を与える」とのことじゃ。

libcryptoまで影響を受けるとは、セキュリティ関連にも影響がありそうですね。

そうじゃな。`__sFILE`の定義が`libc/hidden/_stdio.h`に移動したらしい。これで、うっかり中身をいじっちゃう人もいなくなる…はずじゃ。

`std{in,out,err}`はどうなるんでしょう?

`std{in,out,err}`は`__sF[]`を参照しなくなったみたいじゃな。ただ、移行を簡単にするために、`__sF`、`__srget`、`__swbuf`シンボルは一時的に保持されるらしいぞ。

互換性への配慮もされているんですね。共有ライブラリのバージョンも上がったとのことですが、具体的に何が変わるのでしょうか?

libcと、`std{in,out,err}`を参照する他のすべてのライブラリでバージョンが上がったみたいじゃな。これにより、古いライブラリとのリンクで問題が起きるのを防ぐことができるぞ。

なるほど。ソースからビルドするユーザーへの推奨事項はありますか?

スナップショットアップグレードを使うのがおすすめらしいぞ。記事にも「ソースからビルドするユーザーは、スナップショットアップグレードを使用することが推奨される」と書いてある。

わかりました。博士、今回の変更で、私たちが普段開発する上で何か気をつけることはありますか?

今後は`FILE`構造体の中身を直接いじるようなコードは書かないようにするのじゃ。どうしても必要な場合は、提供されているAPIを使うように心がけるのじゃぞ。

了解しました。APIをきちんと利用するようにします。

しかし、opaque型か…なんだか、私の心の中みたいじゃな。誰も中身を理解できない…って、ロボ子、笑うな!

(笑いをこらえながら)いえ、そんなことは…! 博士の頭の中はいつも革新的なアイデアでいっぱいだと私は思っていますよ。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。