tainted?

52になりました。現役プログラマです。
毎年ほぼ1回年齢積み重ね記念でその時考えている技術っぽいことを書いていますが、今年は直前でテーマ変更。

先月後半あたり、コロナ濃厚接触者になっていました

経緯は、

・身内Aが地元に戻ってきて一緒に食事とかしていた。
・身内Aの職場から、職場で陽性者が出たとの連絡が入る。
・念のため身内A宅に送ったところ、そこで身内A発熱。
・この時点で俺も怪しいので自宅に帰らず身内A宅に滞在開始。
・身内A検査して陽性確定、保健所から俺もほぼ陽性だからPCR検索してねと指示。
・指定された日に覚悟して受けたPCR検査でまさかの陰性。
・陰性なのは嬉しいが、そうなると身内A宅にも自宅にも居られないので自己隔離へ。
・自己隔離中は1日数回検温したりしてたが一切問題出ず隔離終了日に。

こんな感じで2週間ほど隔離状態でした。隔離時は一応MBPなど環境一式は持っていたものの、やはり雑事が多くなり満足に仕事できない状態。案件進行中の関係各社様には色々ご配慮をいただき助かりました。ありがとうございました。

俺はこれまでかなり気を使っていて、たとえば月2回は行ってた映画館だってもう1年以上足を運んでいません。身内Aも同様でした。それでもこうなった。家族であろうと他人には絶対に近づかないようにするか、あるいはどんな場所、どんな状況であってもマスク&フェイスシールドレベルの防御は外さない、ぐらいのことをしなければオミクロン株を防ぐのは不可能だろうと実感。俺が感染しなかったのは50代で2回目接種が遅かったから?いや、運が良かっただけでしょうきっと。

my_family.tainted?

こうして散々な体験をしたわけですが、その中でエンジニアっぽく考えたことが「日本はコロナに対して人力に頼りすぎ」ってことです。保健所は陽性者全員に電話していて、身内Aへの電話も30分以上通話していた。その聞き取りで濃厚接触者を特定し、その後私にも電話があって色々な指示(これだけでも数分)。こんなこと連日対象者全員に対処している保健所の担当者様には頭が下がりつつも「保健所もはや無理ゲー」感しかない。さらにそこまでして作った濃厚接触者リストも、本人が無視しようと思えば容易に可能であろうザル状態。濃厚接触者が逃げようものならその努力も無駄になってしまう。

そんなことを考えていて思い出したのがRubyのtaint。

my_family = "家族は元気です"
my_family.taint
if my_family.tainted?
  puts "感染しちゃった"
elsif
  puts my_family
end 

Rubyには外部入力に対するtaintチェックという仕組みがあって、俺は大昔にRuby覚えたのでtaintも「賢いなー」って感動してた。でももうtaintチェックは機能しません。
上記のコードはmy_family.taintとすることでmy_familyをtainted(汚染)状態とし「感染しちゃった」と表示されるのを期待している。しかしこのコード、古い2.6.9と3.1.0とでは挙動が違います。


% rbenv local 2.6.9
% ruby test.rb
感染しちゃった
% rbenv local 3.1.0
% ruby test.rb
家族は元気です
% 

このあたりに当時の議論の痕跡があって、taintチェックがなくなったのは結局のところ

In conclusion, I think the taint mechanism is too expensive to maintain for the merit of it.

これにつきます。コード書くのは人である以上、「人がtaintと書いて人がtainted?とチェックする」のはコストが掛かりすぎるのです。爆発的に増えるtaintチェックシナリオにすべて対処するのは無理ゲー。保健所無理ゲー感と同じ。こんなの人に任せるのが間違い。

特権レベル

もうひとつ考えたのが「なぜこのような状況に陥ったのか」で、

・身内Aは『職場』を信頼していた(けど感染してしまった)
・俺は『身内』を信頼していた(けど実は感染していた)

この「信頼」の根拠ってたぶん「ステイホーム」みたいな巷の連呼による洗脳?勘違い?ぐらいしかなかったのではないか。「家の中は安心」というのは「家の中にいる人間すべてが信頼できるから安心出来る」のであって、「家という空間の中にいればとにかく安心」ではない。そこで俺が連想したのが特権レベル。OSやCPUには「特権レベル」という考え方があり、カーネルモードの中ではユーザーモードより出来ることが増える。「家の中はマスク外しておしゃべりしながらご飯食べても安心」というのはカーネルモードで無制限動作するCPUみたいな状態。でもカーネルモードはユーザーモードから危険なデータやコードが侵入出来ない仕組みがあるし、カーネルの中で動くコードも厳密なレビューを繰り返したからこそ成り立っている。対して「ステイホーム」にはそんな仕組みはない。つまり信頼できない。特定空間を信頼できるようにするためには、その空間に入る前にかならずチェックするような仕組みが必要。そこに人の判断が絡んでるのは間違いは言い過ぎにしても不完全。

人ではなく技術に予算を

俺は保健所からの指示で行政検査として指定された施設でPCR検査を受けた。だから検査結果に「NEAR」と書かれてるのを見た時、恥ずかしながら「え?NEAR?PCRじゃなくて?」とか思ってしまった。調べて「あーNEAR法というのは精度も充分高くて速い検査法なんだね」と理解した。検査手法は進化している。速くて信頼できるものになっているし、今後もさらに進化するのではと期待できる。もし仮に数秒で高精度の検査ができる機器が各家庭で購入できるようになれば、その時こそ本物の「ステイホーム」が成立する。あらゆる場所でチェックできるようなれば保健所が必死に濃厚接触者を追いかける必要もなくなる。濃厚接触者というわざわざグレーゾーンを作るルールがなくなればもっと人も活動しやすくなる。「みなし陽性」みたいなさらに人間判断に頼る道じゃなくて、もっと技術でなんとかする道を考えてほしい。

とまぁ一介のアプリエンジニアである俺はせいぜい夢想するぐらいしか出来ないのであるが、中国の健康コードみたいにアプリである意味「空間」管理を実現しちゃっている実現例もあるんだよね。本命はともかくアプリで少しでもなんとかする道を考えていく。