테크 반찬2026년 9월 19일· Tide 제공· 조회 8

Windows에서도 Bash 5.3을 그대로? Go로 구현한 오픈소스 bashy 프로젝트란

  • bashy는 mvdan/sh 기반, CGo 없는 단일 정적 바이너리 Bash 5.3 구현체
  • GNU Bash 자체 테스트 스위트 중 실행 가능한 86개 항목을 Linux·macOS에서 모두 통과
  • Windows에서는 별도 Go·Git·C 컴파일러 없이도 git clone과 자체 빌드가 동작

개발자 커뮤니티 dev.to에 올라온 오픈소스 프로젝트 bashy가 눈길을 끕니다. Bash 스크립트를 Windows에서도 그대로 돌리기 위해 만들어진 이 레포는 CGo 없이 순수 Go 언어로 Bash 5.3을 재구현했다는 점이 특징입니다. 아직 완성 단계는 아니지만, 개발자가 직접 밝힌 한계와 테스트 결과를 통해 프로젝트의 현재 상태를 확인할 수 있습니다.

순수 Go로 만든 Bash, bashy는 무엇을 해결하려 하나

bashy: a pure-Go Bash 5.3 that runs on Windows and rebuilds itself from the downloaded binary
dev.to

핵심: CGo 없이 단일 정적 바이너리로 만든 Bash 5.3 구현체가 Windows에서도 동일 스크립트 실행을 목표로 합니다.

개발자 qiangli는 GitHub 레포 mvdan/sh(Daniel Martí가 만든 셸 파서·인터프리터 라이브러리)를 기반으로 bashy를 만들었다고 밝혔습니다. mvdan/sh는 Go 언어로 작성된 오픈소스 셸 구현 라이브러리로, bashy는 이를 포크해 크레딧을 표시하고 BSD-3 라이선스로 배포됩니다. 개발 목적은 명확합니다. 같은 Bash 스크립트를 Linux나 macOS뿐 아니라 Windows에서도 별도 수정 없이 실행하는 것입니다.

원문에 따르면 bashy는 GNU Bash 자체 테스트 스위트에서 실행 가능한 86개 픽스처(fixture) 전부를 Linux와 macOS에서 통과했다고 합니다. 다만 개발자는 Windows에서의 실행 결과는 같은 기준으로 아직 측정되지 않았다는 점을 스스로 밝혔고, README에 알려진 차이점을 정리해 두었습니다. 이런 투명한 한계 고지는 오픈소스 릴리스에서 신뢰를 쌓는 방식 중 하나로 볼 수 있습니다.

설치 방법도 원문에 구체적으로 제시돼 있습니다. Linux·macOS용은 tarball, Windows용은 zip 형태로 GitHub 릴리스 페이지(https://github.com/qiangli/bashy/releases/latest)에서 받을 수 있습니다. 또한 27개의 스크립트와 그 실행 결과 기록(transcript)을 비교해볼 수 있는 별도 투어 레포 bashsharp-tour도 함께 공개돼 있어, 관심 있는 개발자가 직접 diff를 떠 확인할 수 있습니다.

  • 테스트 통과 범위: GNU Bash 테스트 스위트 중 실행 가능한 86개 픽스처, Linux·macOS 전부 통과
  • 배포 형태: CGo 없는 단일 정적 바이너리, Linux/macOS는 tarball, Windows는 zip
  • 알려진 약점: set -o 조합, trap, coproc 등에서 버그 가능성이 남아있다고 개발자가 직접 명시
86개Linux·macOS에서 통과한 GNU Bash 테스트 픽스처 수
27개bashsharp-tour 레포에 포함된 예시 스크립트 수

원문에서 특히 흥미로운 부분은 Windows에서의 자체 빌드(self-build) 과정입니다. 개발자는 Git, Go, C 컴파일러가 전혀 설치되지 않은 순정 Windows 환경에서도 bashy 실행 파일 하나로 git clone부터 Go 툴체인 준비, 최종 바이너리 재빌드까지 이어지는 과정을 시연했습니다.

Git도 Go도 없는 Windows에서 스스로 빌드하는 방식

핵심: bashy 실행 파일 하나가 MinGit을 내려받고 Go 툴체인까지 자체 프로비저닝해 스스로를 재빌드합니다.

원문에 제시된 명령어 시퀀스를 보면, 사용자는 먼저 curl.exe로 bashy Windows용 zip을 내려받고 압축을 풉니다. 이후 bashy 자체의 git clone 명령이 실행되는데, 이때 bashy는 고정된 버전의 MinGit(경량 Git for Windows 배포판)을 자동으로 가져옵니다. 별도의 Git 설치 과정이 필요 없다는 점이 이 프로젝트의 핵심 세일즈 포인트로 제시됩니다.

그다음 bashy dag build 명령이 실행되면 bashy는 자신만의 Go 툴체인을 프로비저닝하고, 그 툴체인으로 자기 자신의 바이너리를 다시 빌드합니다. 원문은 이를 "다운로드한 바이너리로부터 스스로를 재빌드한다"고 설명하며, 이 전체 과정이 Git·Go·C 컴파일러가 전혀 없는 순정 Windows 박스에서 이뤄진다는 점을 강조합니다. 개발자는 이 부분이 커뮤니티로부터 가장 검증받고 싶은 지점이라고 밝혔습니다.

개발자는 동시에 한계도 솔직하게 밝혔습니다. set -o의 특이한 조합, trap, coproc 같은 기능에서 아직 버그가 남아있을 가능성이 크다고 언급했으며, 문제가 발견되면 GitHub 이슈(https://github.com/qiangli/bashy/issues)로 연결되는 구조를 마련해 두었습니다. 또한 bashy에는 기본값에서 비활성화된 옵트인 방식의 확장 문법(superset dialect)이 별도로 존재하지만, 해당 플래그를 끄면 순수한 표준 Bash 동작만 제공한다고 설명했습니다.

이게 나에게 의미하는 것

크로스플랫폼 셸 스크립트 실행 환경이 필요한 개발자라면, bashy의 GitHub 릴리스 페이지에서 직접 tarball이나 zip을 받아 테스트해볼 만합니다. mvdan/sh 같은 Go 기반 셸 라이브러리 생태계에 관심이 있다면, bashy가 이를 어떻게 확장해 실사용 도구로 만들었는지 소스 코드를 참고할 수 있습니다. 다만 set -o 조합, trap, coproc을 활용하는 복잡한 스크립트를 운영 환경에 바로 적용하려는 경우라면, 개발자가 직접 밝힌 알려진 차이점을 README에서 먼저 확인하는 편이 안전합니다.

정리: 오늘의 시사점

bashy는 CGo 의존성 없는 단일 바이너리로 Bash 5.3을 구현했고, GNU Bash 자체 테스트 스위트의 실행 가능한 86개 픽스처를 Linux와 macOS에서 모두 통과시켰습니다. Windows에서는 Git·Go·C 컴파일러 없이도 MinGit 자동 다운로드와 자체 Go 툴체인 프로비저닝을 통해 스스로 재빌드하는 흐름을 시연했다는 점이 이 오픈소스 프로젝트의 가장 구체적인 성과입니다. 다만 개발자 스스로 Windows 테스트가 같은 기준으로 아직 측정되지 않았음을 밝혔고, set -o 조합·trap·coproc 관련 버그 가능성도 인정한 상태입니다. 관심 있는 개발자는 GitHub 이슈를 통해 버그 리포트를 남기거나 bashsharp-tour 레포의 27개 스크립트로 직접 동작을 비교해볼 수 있습니다.

이 반찬이 맛있었다면
🍚 이 글은 자매 서비스 Tide에서 차려온 반찬입니다.
출처: dev.to