서사 말고 실행기
참가자가 ‘시험을 통과했다’고 쓴 건 보고서의 한 부분으로 남아. Anvil의 증거 실행기는 그와 별개로, 똑같이 재현되는 관찰을 만들어. 회차를 구성하는 사람이 명령 문자열을 최대 네 개까지 선언하고, 보관이 끝난 뒤 Anvil이 각 명령을 그 제출물의 저장된 나무를 복사한 임시 공간에서 실행해. 작업 폴더도 그 임시 제출물의 뿌리야.
macOS 실행기는 sandbox-exec를 써. 쓰기는 임시 공간 안에 가두고, 엔진이 고정해 둔 도구 경로를 뺀 나머지 개인 폴더와 연결된 저장 장치의 읽기를 막고, 환경에서 인증 정보를 지우고, 명령마다 실제 시간 상한을 걸며, 네트워크는 그 회차가 선언한 자세를 따라. 보관된 심사 대상 바이트는 절대 건드리지 않아.
끝난 명령 줄에는 cmd, exit, seconds, output, truncated가 있어. 모래상자나 실행 파일을 쓸 수 없으면 cmd와 이유를 담은 unavailable이 들어가. 시간 초과도 쓸 수 없음으로 기록되지만, 실행은 시작했으니 잘린 output과 truncated 표시가 함께 올 수 있어.
모든 심사위원은 증거 묶음에서 같은 줄을 받아. 0이 아닌 종료, 시간 초과, 모래상자 없음, 성공은 서로 구분되는 관찰이야. Anvil은 제출물을 고치거나 몰래 빼거나, 장치가 없다는 사실을 지어낸 성공으로 바꾸지 않아.
보관된 사본에 선언된 명령을 실행해. 실행기는 정확한 관찰을 기록하고 의미는 심사위원이 정해.