自作 OS の GUI 開発のためのメモ
この記事は、自作OS Advent Calendar 2017の 12/6 の記事として書かれました。
主に、ライブラリや仕様書のダウンロード・サイトやリポジトリなどの URL を集めてみました。この他の URL は、以下でブックマークを公開していますので、興味がある方は参照してみてください。
なお、本稿では C ではなく C++ で書かれたライブラリも含まれていますが、必要なら C で書き直したり、C で新規開発したりする必要があると考えています。プロジェクトで採用できないライセンスのライブラリしかない場合も、C で新規開発する必要が生じてきます。
書籍
和書だと参考になる書籍は少ないです。日本国内の事情としては、基盤となる技術というのは作ることよりも利用することがほとんどで、作っている人は海外の英文情報を参照しているからだと思われます。
- グラフィクスの仕組み
- GUIライブラリの仕組み ―ソフトウェア設計のケーススタディ―
- 組み込みGUI(ウィンドウ・システム)環境の設計と実装
- フルスクラッチによるグラフィックスプログラミング入門
- 2&3次元グラフィックス・ソフトの基礎と応用―パソコンによるコア・システムの実現とその活用法 (I/F BOOKS) CQ出版社 (1984/10)
- 2Dグラフィックスのしくみ ――図解でよくわかる画像処理技術のセオリー
- Androidを支える技術〈Ⅰ〉──60fpsを達成するモダンなGUIシステム
GUI ライブラリ
組み込み向けなどのコンパクトな GUI ライブラリの存在は確認したものの、HiDPI(4K などの高解像度)への対応が可能なのかは未確認です。新規開発が必要になるかもしれません。また、HTML のレンダリングは別途、検討したいと考えています。
- Immediate-Mode-UI/Nuklear: A single-header ANSI C immediate mode cross-platform GUI library
- SL-RU/MakiseGUI: Graphics and GUI library for embed systems.
- lc-soft/LCUI: A simple GUI library, it is written in C, support XML and CSS.
- xamarin/flex: Flex is a flexible box layout system written in C, designed to be easy to consume from other languages
- littlevgl/lvgl: Embedded graphics library with transparency, animations and anti-aliasing with NO Double buffering.
Desktop Entry Specification
EditorConfig
文字コード
文字コードの検出・変換・Unicode 関連の処理を行うライブラリです。
- google/compact_enc_det: compact_enc_det - Compact Encoding Detection
- International Components for Unicode - Wikipedia
- Downloading ICU - ICU - International Components for Unicode
フォント
フォントと、フォントを描画するライブラリです。
- Google、オープンソースフォント「Noto」がUnicode標準をフルサポートしたことを明らかに - 窓の杜
- googlei18n/noto-fonts: Noto fonts, except for CJK and emoji
- The FreeType Project
レイアウトエンジン
日本語組版についての文書や、Unicode 文書のレイアウトを処理するライブラリです。
- 日本語組版処理の要件(日本語版)
- HarfBuzz - Wikipedia 日本語版
- HarfBuzz - Wikipedia 英語版
- HarfBuzz – Y.A.M.A.P
- GNU FriBidi - Wikipedia 日本語版
- fribidi/fribidi: GNU FriBidi
- fribidi/fribidi - GNU FriBidi 0.19 series, an implementation of the Unicode Bidirectional Algorithm
文書ファイル
LibreOffice の文書ファイルの仕様書です。
Web ブラウザ・ベンダの公開しているライブラリです。
PDF.js(Mozilla)
PDFium(Google)
- Google Chrome PDFエンジンがオープンソース化
- pdfium Git repositories - Git at Google
- Issues - pdfium - PDFium - Monorail
- SDK Docs - Foxit Developer Portal | PDF SDK technology
- にっき♪: PDFium
画像
HEIF はロイヤリティの支払いが困難なため、除外しています。
JPEG
- Independent JPEG Group
- libjpeg-turbo/libjpeg-turbo: Main libjpeg-turbo repository
- libjpeg-turbo:Beyond Linux® From Scratch
Exif
libexif のライセンスがプロジェクトに適していない場合には、JEITA の仕様書を参照して、独自に実装する方法を採用することが出来ると思います。
PNG
IE や Edge で APNG に対応していないため、APNG への対応方法は未調査です。
GIF
SVG
JIS X 4197:2012 は SVG Tiny の仕様書です。SVG ではありません。ご注意ください。
- memononen/nanosvg: Simple stupid SVG parser
- SVG 1.1 仕様 (第2版) 日本語訳
- JIS X 4197:2012 変倍ベクタグラフィックス/SVG Tiny 1.2
Canvas
- memononen/nanovg: Antialiased 2D vector drawing library on top of OpenGL for UI and visualizations.
- NanoVG で HTML5 Canvas の力を C/C++ にも - Qiita
- NanoVG を CPU で描画する - Qiita
- NanoVG のソースコードを読んでみた - lriki’s blog
Favicon
- Favicon - Wikipedia 日本語版
- Favicon - Wikipedia 英語版
- ICO (ファイルフォーマット) - Wikipedia
- ICO (file format) - Wikipedia
- [Rockridgeさんのツイート: "Fx55:PlacesのデフォルトファビコンがSVG形式に変更され、高DPI環境に対応した。 / “1360891 - Replace the Places default favicon with an SVG” https://t.co/XzskgQKwOy" ](https://twitter.com/rockridge07/status/868125619963314176
- [Rockridgeさんのツイート: "Fx56:Firefox 43以降512x512のサイズのファビコンが表示されなくなっていた後退バグを修正し、さらに768x768のような大きなファビコンもサポート。参照:https://t.co/5hbDBYV5s2 / “1…” https://t.co/3CnrOkx9K8"](https://twitter.com/rockridge07/status/905787835357077504
音声
AAC は、ロイヤリティの支払いが困難なため、除外しています。
WAV
- WAV - Wikipedia 日本語版
- WAV - Wikipedia 英語版
- Resource Interchange File Format - Wikipedia 日本語版
- Resource Interchange File Format - Wikipedia 英語版
- Wave File Specifications
- WAVファイルフォーマットの読み込み – NecoTech
- wav ファイルフォーマット
- Waveフォーマット・PCM・サンプリング周波数・ビット数・チャンネル数とは、SoundEngine・RadioLineを例にわかりやすく解説 | 豆知識
Ogg Vorbis, WebM Vorbis
- Vorbis - Wikipedia 日本語版
- Vorbis - Wikipedia 英語版
- Ogg - Wikipedia 日本語版
- Ogg - Wikipedia 英語版
- Xiph.org: Downloads
- Xiph.org - vorbis.git/summary
- libvorbis:Beyond Linux® From Scratch
- Xiph.org - ogg.git/summary
- libogg:Beyond Linux® From Scratch
- The WebM Project | Developer Overview
Ogg Opus, WebM Opus
- Opus (音声圧縮) - Wikipedia
- Opus (audio format) - Wikipedia
- Development – Opus Codec
- Opus:Beyond Linux® From Scratch
- Xiph.org - ogg.git/summary
- libogg:Beyond Linux® From Scratch
- The WebM Project | Developer Overview
FLAC
- FLAC - Wikipedia 日本語版
- FLAC - Wikipedia 英語版
- FLAC - download
- xiph/flac: Free Lossless Audio Codec
- FLAC:Beyond Linux® From Scratch
MP3
特許切れの報道は確認したものの、利用可能なライブラリは未調査です。
動画
H.264 や HEVC はロイヤリティの支払いが困難なため、除外しています。
Cisco Systems がロイヤリティを OSS 開発者に代わって支払ってくれるという OpenH264 は以下のような情報もあり、採用する場合は機能が不足していないか、確認が必要だと思います。
- vyv03354さんのツイート: "@d_toybox OpenH264はvideo要素で使うには機能不足らしく、WebRTCでしか使いません。AdobeのDRMプラグインを非DRM動画でも使おうという案もありましたが、Facebookで問題が起きて頓挫したようです。"
- vyv03354さんのツイート: "https://t.co/Bahw5xojAX Adobe CDMのバージョンアップでFacebookでの問題が解決したので、Firefox 46からXPでもH.264動画が再生できるようになる見込みです。 #もずでぶ"
- OpenH264
Ogg Theora
- Theora - Wikipedia 日本語版
- Theora - Wikipedia 英語版
- Theora.org :: downloads - Theora, video for everyone
- Xiph.org - theora.git/summary
- libtheora:Beyond Linux® From Scratch
WebM VP8/VP9
- VP8 - Wikipedia 日本語版
- VP8 - Wikipedia 英語版
- VP9 - Wikipedia 日本語版
- VP9 - Wikipedia 英語版
- WebM - Wikipedia 日本語版
- WebM - Wikipedia 英語版
- The WebM Project | Developer Overview
- webmproject/libvpx: Mirror only. Please do not send pull requests.
- libvpx:Beyond Linux® From Scratch