みんなが知ってるそのスマホにも密かに流れる、そうLinux kernel.
最近はそのコミットを眺める機会が多いのですが、色々調べていたら面白い点を見つけたので紹介します。
UTF-8として有効ではないコミットタイトル
いまから137万コミットほど前のこと、2006年のコミットタイトルに、UTF-8の範囲外の文字が含まれていました。(don<B4>tと書いてある部分がそれです。)
commit d354d9afe923eb08f7ee89128b38ddb6415de01d
Author: Knut Petersen <Knut_Petersen@t-online.de>
Date: Sat Jan 7 10:22:04 2006 +0100
[PATCH] fbcon: don<B4>t call set_par() in fbcon_init() if vc_mode == KD_GRAPHICS
Nothing prevents a user to modprobe a framebuffer driver from e.g. the
xterm prompt. As a result, the set_par() function of the driver will be
called from fbcon_init().
This is fatal as a lot of X / framebuffer combinations are unable to
recover from set_par() reprogramming the graphics controller in
KD_GRAPHICS mode.
It is also unnecessary as the set_par() function will be called during a
switch to KD_TEXT anyway. Because of this no side effects are possible.
Signed-off-by: Knut Petersen <Knut_Petersen@t-online.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Rust含め、最近のプログラミング言語は「文字列とはUTF-8文字列である」という前提をおいているので、これが原因でクラッシュするシステムとか、どこかにありそうですね…。
ちなみにmasterことLinusツリーの全コミットを調べましたが、コミットタイトルに他に非UTF-8文字列が含まれているものはなさそうでした。残念…。
ところでこの0xB4という文字の正体を調べたところ、以下のサイトに行きあたりました。Extended ASCII Table (Windows-1252) に含まれる拡張文字で、HTML的にいうと´にあたるようです。
アキュート・アクセント記号は本来、発音を指示するために使われるもので、caféのように文字に添えて使うものになります。
しかし当該コミットでは、単語の中での文字の省略を表現するアポストロフィーを意図してこの記号が使われてしまったようです。
文字って難しいですね…
ちなみにgitのコミットメッセージのエンコーディングはコミットごとに指定可能で、以下のようにすれば表示できます。
git log --pretty='format:%h:(Encoding: "%e")' HEAD
驚くべきことに、コミットのエンコーディングが指定されているコミットは、masterのHEADから辿れる中では200個ちょっとしかありませんでした。
そして、ISO-8859-1を使っているコミットの大多数はLarry Fingerさんによるものでした。おめでとうございます!(?)
190 (Encoding: "ISO-8859-1") Larry Finger Larry.Finger__at__lwfinger.net
6 (Encoding: "ISO-8859-2") Jiri Kosina jkosina__at__suse.cz
3 (Encoding: "ISO-8859-2") Uwe Kleine-König u.kleine-koenig__at__pengutronix.de
2 (Encoding: "ISO-8859-2") Peter Huewe peterhuewe__at__gmx.de
1 (Encoding: "ISO-8859-2") Randy Dunlap randy.dunlap__at__oracle.com
1 (Encoding: "ISO-8859-2") Otavio Salvador otavio__at__ossystems.com.br
1 (Encoding: "ISO-8859-2") Nick Bowler nbowler__at__elliptictech.com
1 (Encoding: "ISO-8859-2") Michael Roth mroth__at__nessie.de
1 (Encoding: "ISO-8859-2") Dirk Hohndel hohndel__at__infradead.org
1 (Encoding: "ISO-8859-2") Claudio Scordino claudio__at__evidence.eu.com
1 (Encoding: "ISO-8859-2") Anssi Hannula anssi.hannula__at__iki.fi
1 (Encoding: "ISO-8859-2") Andrew Sharp andy.sharp__at__lsi.com
1 (Encoding: "ISO-8859-2") Anders Larsen al__at__alarsen.net
1 (Encoding: "ISO-8859-2") Amerigo Wang amwang__at__redhat.com
1 (Encoding: "ISO-8859-1") Stephen Rothwell sfr__at__canb.auug.org.au
ついでにいうと、冒頭のコミットはエンコーディング未指定でした。まあそういうこともあるよね…。
$ git log -1 --pretty='format:%h: (Encoding: "%e")' d354d9afe923eb08f7ee89128b38ddb6415de01d d354d9afe923: (Encoding: "")
参考文献はこちら。
Commit log messages are typically encoded in UTF-8, but other extended ASCII encodings are also supported. This includes ISO-8859-x, CP125x and many others, but not UTF-16/32, EBCDIC and CJK multi-byte encodings (GBK, Shift-JIS, Big5, EUC-x, CP9xx etc.).
以上、ほぼ役に立たない完全に脱線した時間の浪費をお伝えしました。ではでは。