
새 C 언어 기반 deflate 구현인 tugz가 공개됐다. 제작자는 이를 바탕으로 w64devkit 2.10.1에 zip을 추가하고 busybox-w32의 unzip, gzip, gunzip, zcat을 대체했다. 새 프로그램은 Windows를 지원하고 유니코드 처리를 개선했으며, 제작자에 따르면 기존 BusyBox 도구와 일반적인 리눅스 배포판의 gzip·Info-ZIP보다 전반적으로 빠르고 결과물은 약간 작다.
tugz 프로젝트는 퍼블릭 도메인으로 공개됐다. 제작자는 tugz의 deflate 성능이 zlib보다 낫지만 libdeflate보다는 낮다고 설명한다. 프로그램은 CRT 없이 빌드할 수 있으며, gunzip과 zcat은 gzip의 별칭 또는 심볼릭 링크로 제공된다. 라이브러리 인터페이스는 tugz.h에 정의돼 있지만, 제작자는 현재 이를 다른 프로젝트에서 사용하지 않으며 w64devkit에도 포함하지 않았다고 밝혔다.
w64devkit에서 CMake 없이 빌드하는 예시는 다음과 같다.
$ cc -nostartfiles -O2 -o zip platform/zip_windows.c -lmemory
$ cc -nostartfiles -O2 -o gzip platform/gzip_windows.c -lmemory
$ cc -nostartfiles -O2 -o unzip platform/unzip_windows.c -lmemory
$ cc -shared -nostdlib -O2 -o tugz.dll platform/libtugz.c -lmemory
zip은 Info-ZIP의 동작을 따라 기존 파일을 갱신한다. 릴리스 파일을 Windows에서 쓰기 좋은 ZIP으로 묶을 때는 다음처럼 Makefile 규칙을 사용할 수 있다.
myapp-$VERSION.zip: myapp.exe README.md
rm -f $@
zip -X9 $@ $^
rm은 기존 ZIP 파일을 먼저 지우기 위한 명령이다. -X는 확장 속성을 제외해 결과를 안정적으로 만들고, -9는 최대 압축을 요청한다. 디렉터리를 재귀적으로 묶을 수도 있다.
$ ssg
$ zip -r nullprogram.zip _site/
tugz의 unzip은 더 큰 슬라이딩 윈도우를 사용하는 deflate 확장인 Deflate64 압축 해제를 지원한다. BusyBox의 unzip은 이를 지원하지 않아 일부 Windows 제작 ZIP 파일을 풀 수 없지만, tugz는 이런 경우에도 대응한다.
다만 줄바꿈 변환과 ZIP 암호화 기능은 구현하지 않았다. 이 기능을 요청하는 옵션을 사용하면 오류가 발생한다. 이번에는 리눅스 시스템 호출용 플랫폼 계층도 제공하지 않아, 리눅스에서 배포판과 무관하게 동작하는 빌드는 포함되지 않았다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요