프로그램이 실제와 다른 이름인 척하는 게 꽤 거슬림
macOS에서 gcc를 실행했는데 실제로는 clang이 나오는 경우가 최악이고, PowerShell도 비슷하게 동작함. 그냥 다른 이름을 쓰면 좋겠음
많은 개발자가 clang을 모르거나, 테스트할 Mac이 없거나, 현실적인 대안이 없던 시절에 시작했기 때문에 생긴 문제도 있음
Nixpkgs는 https://github.com/NixOS/nixpkgs/… 같은 패치를 많이 해야 하고, sqlite 같은 유명 프로젝트도 예외가 아님. 반면 macOS는 그냥 속이는 경로를 택한 셈임
많은 소프트웨어의 makefile을 쓰는 사람들이 cc를 모르는 경우가 있음
답답함은 이해하지만, 대부분의 빌드 스크립트를 돌릴 만큼 충분히 호환되면 Linux와 여러 Unix 계열에서 같은 스크립트를 어느 정도 재사용할 수 있어서 퍼졌을 가능성이 큼
때로는 현실적으로 불가능함 gcc가 하드코딩된 makefile이 많을 것이고, 다른 맥락에서도 비슷함. 예를 들어 기존 프로그램 다수가 올바른 해법인 terminfo 데이터베이스 대신 TERM 환경 변수의 xterm-*를 확인하므로, 다른 이름을 고르는 방식은 통하지 않음
컨테이너에서 이상한 문제를 진단할 때 podman cp /usr/bin/busybox-static somecontainer:/bin을 자주 씀
toybox도 비슷한 구조임
일부 도구는 다른 곳에서 가져오거나 이식한 것으로 보이지만, 상당수는 BusyBox용으로 새로 구현됐고, 작게 만들며 정적 링크 시 작게 컴파일되도록 제한된 libc 기능만 쓰는 것이 목표임. 또 다른 장점은 셸 스크립트에서 이런 도구들을 내장 명령처럼 쓸 수 있다는 점임. 일부는 fork+exec가 아니라 fork+jump로 실행되고, 몇몇은 fork 없이 일반 함수 호출로도 실행됨
toybox는 원래 GPL 라이선스인 BusyBox의 BSD 라이선스 대안으로 만들어진 것으로 알고 있음
덧붙이면, Toybox on Wikipedia에 따르면 “Toybox는 Rob Landley가 BusyBox의 원 제작자인 Bruce Perens와의 분쟁으로 BusyBox 유지보수자 역할을 그만둔 뒤 2006년 초에 시작했다”고 되어 있음
실제로는 재구현임. 다만 라이선스가 허용하는 경우라면 원래의 큰 구현에서 일부 코드를 빌려왔어도 놀랍지는 않음 From the 'pedia:에 따르면 BusyBox는 1995년 Bruce Perens가 처음 작성했고, 1996년 의도한 용도에는 완성됐다고 선언됐음. 처음 목표는 Debian 배포판의 복구 디스크이자 설치 프로그램 역할을 하는 완전한 부팅 가능 시스템을 플로피 디스크 하나에 넣는 것이었음. 이후 임베디드 Linux 장치와 Linux 배포판 설치 프로그램에서 사실상 표준 핵심 사용자 공간 도구 모음으로 확장됐고, Linux 실행 파일마다 몇 KB의 오버헤드가 필요하므로 200개가 넘는 프로그램을 하나로 합치면 디스크 공간과 메모리를 크게 절약할 수 있음
관련해서 Toybox도 구조와 철학이 비슷하지만 BSD 라이선스임. 주 개발자인 Rob Landley는 상업적으로 받아들이기 쉬운 라이선스라면 Android 기기에 포함될 수 있고, 그렇게 되면 모든 Android 휴대폰과 태블릿이 Unix 비슷한 개발 환경으로 바뀔 잠재력을 갖게 된다고 봤던 것으로 기억함. Toybox는 아직 Android의 일부인 것 같지만, Termux처럼 위 계층에서 도와주는 도구 없이는 Android에서 Unix처럼 쓰기 쉽지 않음
Google 같은 회사에 무상 노동을 해주는 일이 어떻게 자기 발목을 잡는지 보여주는 교과서적 사례로 이보다 완벽하기 어려움
특히 Google이 수년 동안 Termux를 막겠다고 위협해 온 점까지 생각하면 더 그렇다
Lobste.rs 의견들
인용된 질문의 답은 재구현에 가까움
BusyBox 소개는 https://busybox.net/about.html 에 있고, 소스는 https://github.com/vda-linux/busybox_mirror 에 있음
프로그램이 실제와 다른 이름인 척하는 게 꽤 거슬림
macOS에서
gcc를 실행했는데 실제로는 clang이 나오는 경우가 최악이고, PowerShell도 비슷하게 동작함. 그냥 다른 이름을 쓰면 좋겠음Nixpkgs는 https://github.com/NixOS/nixpkgs/… 같은 패치를 많이 해야 하고, sqlite 같은 유명 프로젝트도 예외가 아님. 반면 macOS는 그냥 속이는 경로를 택한 셈임
cc를 모르는 경우가 있음gcc가 하드코딩된 makefile이 많을 것이고, 다른 맥락에서도 비슷함. 예를 들어 기존 프로그램 다수가 올바른 해법인terminfo데이터베이스 대신TERM환경 변수의xterm-*를 확인하므로, 다른 이름을 고르는 방식은 통하지 않음컨테이너에서 이상한 문제를 진단할 때
podman cp /usr/bin/busybox-static somecontainer:/bin을 자주 씀toybox도 비슷한 구조임
일부 도구는 다른 곳에서 가져오거나 이식한 것으로 보이지만, 상당수는 BusyBox용으로 새로 구현됐고, 작게 만들며 정적 링크 시 작게 컴파일되도록 제한된 libc 기능만 쓰는 것이 목표임. 또 다른 장점은 셸 스크립트에서 이런 도구들을 내장 명령처럼 쓸 수 있다는 점임. 일부는 fork+exec가 아니라 fork+jump로 실행되고, 몇몇은 fork 없이 일반 함수 호출로도 실행됨
덧붙이면, Toybox on Wikipedia에 따르면 “Toybox는 Rob Landley가 BusyBox의 원 제작자인 Bruce Perens와의 분쟁으로 BusyBox 유지보수자 역할을 그만둔 뒤 2006년 초에 시작했다”고 되어 있음
실제로는 재구현임. 다만 라이선스가 허용하는 경우라면 원래의 큰 구현에서 일부 코드를 빌려왔어도 놀랍지는 않음
From the 'pedia:에 따르면 BusyBox는 1995년 Bruce Perens가 처음 작성했고, 1996년 의도한 용도에는 완성됐다고 선언됐음. 처음 목표는 Debian 배포판의 복구 디스크이자 설치 프로그램 역할을 하는 완전한 부팅 가능 시스템을 플로피 디스크 하나에 넣는 것이었음. 이후 임베디드 Linux 장치와 Linux 배포판 설치 프로그램에서 사실상 표준 핵심 사용자 공간 도구 모음으로 확장됐고, Linux 실행 파일마다 몇 KB의 오버헤드가 필요하므로 200개가 넘는 프로그램을 하나로 합치면 디스크 공간과 메모리를 크게 절약할 수 있음
관련해서 Toybox도 구조와 철학이 비슷하지만 BSD 라이선스임. 주 개발자인 Rob Landley는 상업적으로 받아들이기 쉬운 라이선스라면 Android 기기에 포함될 수 있고, 그렇게 되면 모든 Android 휴대폰과 태블릿이 Unix 비슷한 개발 환경으로 바뀔 잠재력을 갖게 된다고 봤던 것으로 기억함. Toybox는 아직 Android의 일부인 것 같지만, Termux처럼 위 계층에서 도와주는 도구 없이는 Android에서 Unix처럼 쓰기 쉽지 않음
특히 Google이 수년 동안 Termux를 막겠다고 위협해 온 점까지 생각하면 더 그렇다
Windows 포트도 있음: https://github.com/rmyorston/busybox-w32
BusyBox의 작은 크기 덕분에 이런 포트가 더 현실적임. 다만 이제는 Windows 안에서 Linux를 그냥 실행할 수 있어서 관련성은 좀 줄어든 듯함