4月18日、著者が「SQLite prefixes its temp files with etilqs_」と題した記事を公開した。
世界で最も普及しているデータベースエンジンの一つSQLiteが、一時ファイルに付ける謎の接頭辞「etilqs_」。この奇妙な文字列には、開発者たちが深夜の苦情電話に悩まされた末に編み出した、涙ぐましい工夫が隠されていた。
著者は、分散SQLiteサービスTursoの開発中にこの発見をした。データベースのVACUUM機能(使われなくなったスペースを回収し、ファイルサイズを最適化する機能)を実装する際、SQLiteが一時ファイルに付ける接頭辞が「etilqs_」、つまり「sqlite」を逆順に並べたものだということが判明したのだ。
McAfeeが引き起こした「深夜の苦情電話」問題
この奇妙な命名の背景には、開発者たちの実体験に基づく苦労があった。SQLiteのソースコードには、以下のような生々しいコメントが記されている:
/*
** 2006-10-31: The default prefix used to be "sqlite_". But then
** Mcafee started using SQLite in their anti-virus product and it
** started putting files with the "sqlite" name in the c:/temp folder.
** This annoyed many windows users. Those users would then do a
** Google search for "sqlite", find the telephone numbers of the
** developers and call to wake them up at night and complain.
** For this reason, the default name prefix is changed to be "sqlite"
** spelled backwards. So the temp files are still identified, but
** anybody smart enough to figure out the code is also likely smart
** enough to know that calling the developer will not help get rid
** of the file.
*/
2006年まではデフォルトの接頭辞は「sqlite_」だった。しかし、セキュリティ企業McAfeeがアンチウイルス製品でSQLiteを使用するようになり、Windowsのc:/tempフォルダに「sqlite」という名前の一時ファイルが大量に作られるようになった。
当時のWindowsユーザーの多くは、見慣れない「sqlite」ファイルがシステムに現れることに不安を感じた。ウイルスやマルウェアではないかと疑ったユーザーたちは、Googleで「sqlite」を検索し、なんと開発者の電話番号を調べ上げて深夜に直接電話をかけて苦情を言うという事態が頻発したのだ。
「コードを理解できる人なら電話しない」という皮肉な解決策
困り果てた開発者たちは、接頭辞を「sqlite」の逆順である「etilqs_」に変更した。コメントには開発者たちの複雑な心境が表れている:「コードを理解できるほど賢い人なら、開発者に電話をしてもファイルの削除には役に立たないことも理解できるだろう」。
つまり、「etilqs_」という謎めいた文字列を見て、それがSQLiteの一時ファイルだと気付けるような技術者であれば、開発者に苦情の電話をかけるような無意味な行動は取らないだろう、という皮肉めいた期待が込められているのだ。
20年経った今でも使われ続ける「苦肉の策」
この変更から約20年が経った現在でも、SQLiteは一時ファイルの接頭辞として「etilqs_」を使い続けている。現在のソースコードでも以下のように定義されている:
#ifndef SQLITE_TEMP_FILE_PREFIX
# define SQLITE_TEMP_FILE_PREFIX "etilqs_"
#endif
SQLiteは現在、スマートフォンアプリからWebブラウザ、組み込みシステムまで、世界中で数十億のデバイスで使用されている。SQLite公式サイトによると、地球上で最も広く展開されているデータベースエンジンだ。この「etilqs_」という小さな文字列は、オープンソースプロジェクトの開発者が実際に直面した人間的な問題と、それに対する創意工夫の産物として、今日も静かにその役割を果たし続けているのだ。
詳細はSQLite prefixes its temp files with etilqs_を参照していただきたい。