재현 가능한 빌드(Reproducible Build)는 같은 소스 코드, [[빌드 환경]], 절차를 사용했을 때 다른 사람도 지정된 결과물을 비트 단위까지 동일하게 만들 수 있는 빌드다. 화면이 비슷하게 보이는지만 비교하지 않으며, 어떤 결과물을 비교 대상으로 삼는지도 명시한다. 보통 암호학적 [[체크섬]]으로 일치 여부를 확인한다. ([Reproducible Builds의 정의](https://reproducible-builds.org/docs/definition/)) - [공식 웹사이트](https://reproducible-builds.org/) - 소스 코드의 판 번호만 같아서는 충분하지 않다. 사용하는 도구와 의존성의 버전, 설정, 환경 변수 가운데 결과에 영향을 주는 조건도 알아야 한다. - 예컨대 생성형 웹 작업을 정적 파일로 배포한다면 소스와 입력 자료뿐 아니라 [[난수 시드]], 도구 버전, 파일을 읽는 순서도 검토 대상이 될 수 있다. 시드를 고정하는 한 가지 조치만으로 전체 빌드의 재현성이 보장되지는 않는다. - [[버전 관리]]는 어떤 소스를 썼는지 찾게 하고, [[백업]]은 보관한 결과를 되찾게 한다. 재현 가능한 빌드는 그 소스로 결과물을 다시 만들 수 있는지 확인한다. - 빌드 결과가 일치해도 프로그램이 의도대로 작동한다는 검증은 별도로 필요하다. 결과물의 동일성과 기능의 정확성은 확인하는 대상이 다르다. ## 기타 등등 - 빌드 시각을 결과물에 넣는 도구는 같은 소스로도 매번 다른 파일을 만들 수 있다. 이를 다루는 `SOURCE_DATE_EPOCH`는 도구가 참고할 기준 시각을 환경 변수로 전달한다. 도구가 이 변수를 지원해야 효과가 있다. [출처](https://reproducible-builds.org/docs/timestamps/) - 로케일에 따라 문자 정렬도 바뀐다. 공식 문서의 예에서 `B a c`는 프랑스어 UTF-8 로케일에서 `a B c`로, `C` 로케일에서는 `B a c`로 정렬된다. 파일을 묶는 순서까지 결과에 영향을 줄 수 있는 이유다. [출처](https://reproducible-builds.org/docs/locales/) #개념 #소프트웨어 #디지털보존