銀行員は、自分自身のために送金限度額を自分で引き上げることはできません。
銀行で手続きをしていたときに、けっこう面白いことを見たことがあります。
担当者は一日中、お客様の取引を処理できます。
書類を確認できます。
手続きの複数の段階を承認できます。
しかし、自分の口座の送金限度額を引き上げる必要がある場合、自分では修正できません。
それは別の人を経由しなければなりません。
最初はかなり不便だと感じた。
もしシステムがその人が銀行員だと分かっているなら、最初から許可しないのはなぜだ?
後から考えると、銀行が守ろうとしていたのは、たぶん限度額そのものではない。
彼らは、実行者と法律を書く人の間にある境界を守っている。実行のために。
それは、@NewtonProtocol でどう authorization を構築するかを読んだときに、かなり考えさせられた。
気になっているのは、あるエージェントに action を実行する許可があるかどうかではない。
いや、それはもっと早い段階で起きる問いだ。
何が許されるかを決めるのは誰だ?
それはとても大きな違いだ。
多くのシステムでは、私たちは実行者をチェックするために多くの時間を費やしがちだ。
そのアクションは正当なのか?
Permission は正しいのか?
execution は、その範囲内に収まっているのか?
でもニュートンは、さらに深い層のことにも関心があるようだった。
では、その制限そのものを変えられるのは誰だ?
もし実行者もまた、自分を監督しているポリシーを書き換えられる人間なら、その後段のあらゆるチェックがとても脆くなる。
そのとき問題は、execution にはなくなる。
問題は、プレイヤー自身もゲームのルールを勝手に修正できてしまうことにある。
だからこそ、ポリシーを書く人とポリシーを実行する人を分けることは、単なる権限委譲の選択ではないと自分は思う。
それはアーキテクチャ上の判断だ。
execution が完全に自動で行われるときでも、ポリシーに意味が残るようにするための判断だ。
自己反論。
しかし権限を分けることには、常にその代償がある。
銀行に戻ろう。
お客さんが限度額を急に増やす必要があるときもある。
スタッフは書類が揃っていることをよく分かっている。
取引が完全に正当であることを知っている。
でも彼らは、それでも別の誰かが確認するのを待たなければならない。システムが自分の制限を自分で書き換えることを許していないからだ。
その体験は確実に遅い。
しかもときには、ユーザーが手続きがあまりにも硬すぎると感じてしまうことさえある。
でも、その境界を捨ててただ速くするだけなら、統制の仕組み全体は意味を失う。
実行者はもうポリシーによって制約されない。
彼らは先にポリシーを変更してから、その後にアクションを実行できる。
そのとき壊れるのは、取引ではない。
それが、システムそのものへの信頼だ。
@NewtonProtocol からもっとはっきり見たいのは、いくつの種類のポリシーがあるかではない。
つまり、システムがポリシーを定義する人と、そのポリシーの内側でだけ行動することが許されている人との距離を保つ方法のことだ。
自分にとっては、authorization layer は、実行権を持つ人が同時に、その行動を正当化するために法律を書き換える権利も持っていないとき、はじめて本当に信頼できる。
もしニュートン・プロトコルがその境界を明確かつ透明に保てるなら、その価値はシステムがもっと検証することにはない。
しかも、誰もこっそり法律を作り替えて、その変更から自分だけが利益を得られるわけではない。

