derivation이 평가되고 출력 경로까지 정해졌다면 여기까지는 확인됐어요. 식이 제대로 평가되고 자기 출력을 가리킨다는 거죠. 빌더가 실제로 무엇을 만들어 낼지에 대해서는 훨씬 적게 알려 줘요. Nix의 함수형 평가 덕분에 식 자체는 따져 볼 수 있지만, 빌더가 돌리는 외부 명령에는 그 명령 나름의 입력이 있어요.
마음에 걸리는 경우는 작아요. 빌드 환경이 선언되지 않은 호스트 파일 읽기를 허용하고, 빌더는 /opt/local/banner를 출력에 복사해요. 두 번의 빌드 사이에 선언된 입력은 그대로인데 그 파일만 바뀌어요. 그러면 출력 내용이 달라질 수 있고, 식에는 그 이유가 전혀 드러나지 않아요. 물론 이 반례는 그 읽기가 허용될 때만 성립해요.
그래서 재현성을 주장하려면 빌더 정의와 선언된 의존성, 그리고 빌더가 실제로 관찰할 수 있는 외부 입력이 무엇인지에 대한 근거가 함께 있어야 해요. 바뀌는 호스트 상태를 일부러 허용했다면 무엇을 고정했는지도 주장에 적어야 하고요.
SLSA 프로비넌스에는 빌드 정의와 실행 정보, 그리고 알려진 해석된 의존성을 남길 수 있어요. 덕분에 주장을 들여다보기는 쉬워져요. 출력에 영향을 주는 입력을 빠짐없이 셌는지는 여전히 열려 있고, 이 derivation에서 무엇이 그 빈틈을 메울지는 솔직히 아직 모르겠어요.