
Rust로 만든 오픈소스 비교 도구 OmniDiff는 코드뿐 아니라 이미지, 글꼴, 압축 파일, PDF 등의 변경 내용을 파일 형식에 맞춰 보여준다. 개발자는 터미널에서 대화형 화면으로 변경점을 살피거나 Git의 difftool로 연결해 사용할 수 있다.
OmniDiff는 파일 확장자로 언어를 판별해 25개 언어의 코드를 구조적으로 비교하며, 알 수 없는 확장자의 파일은 일반 텍스트로 처리한다. PNG·JPEG·GIF 등의 이미지는 픽셀 단위로, 글꼴은 글리프 단위로, PDF는 페이지별로 비교한다. 지원되지 않는 바이너리 파일은 차이 내용을 보여주는 대신 파일이 다르다는 한 줄을 출력한다.
제작자가 공개한 성능 측정에서는 Intel Core i7-1370P 노트북에서 코드 비교 대상 2,302개 가운데 중앙값 처리 시간이 4.2ms, 99백분위가 177ms였다. 다만 자료에 따르면 아카이브 비교는 99백분위 목표를 충족하지 못했고, PDF는 57%만 100ms 이내에 처리됐다. PDF는 변경된 페이지를 모두 그리기 때문에 처리 시간이 길어질 수 있다고 설명한다.
정확도 목표는 아직 달성하지 못했다. 손으로 정답을 표시한 코드 비교 사례 1,419개를 기준으로, OmniDiff의 강조 표시가 바이트 단위로 완전히 일치한 비율은 --full 설정에서 60.0%, --minimal에서 69.6%였다. 제작자가 별도로 판정한 콘텐츠 비교 사례에서는 이미지 130개 중 69%가 완벽히 일치했고 91%가 한 단계 이내로 일치했다. 이 수치는 제작자가 마련한 테스트 자료를 대상으로 한 결과다.
설치는 소스 빌드, 운영체제별 사전 빌드 바이너리, Homebrew, Debian·Ubuntu용 패키지, Nix를 통해 할 수 있다. 소스에서 빌드하려면 C 컴파일러와 Rust 툴체인이 필요하며, 요구 버전은 rustc 1.92 이상이다. Git에서는 omnidiff git configure로 설정할 수 있고, 대화형 비교 화면은 git difftool에서 사용한다. git diff에서는 전체 화면 대신 일반 텍스트 출력을 제공한다.
OmniDiff는 AGPL 버전 3으로 배포되며, 조직 내부 사용에 적용되는 상용 라이선스도 제공한다. 현재 기여는 받지 않는다고 안내하고 있다. 브라우저에서 비교 예제를 보려면 OmniDiff 쇼케이스와 콘텐츠 예제를 이용할 수 있다. 설치 방법과 전체 지원 범위는 GitHub 저장소에서 확인할 수 있다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요