gori는 macOS, Linux, Windows용 단일 바이너리로 배포되지만, 모든 플랫폼이 같은 수준으로 보장되지는 않습니다. 플랫폼은 두 등급(tier)으로 나뉩니다. 플랫폼 이름은 릴리스 자산 이름(linux-arm64, osx-x86_64)처럼 OS와 CPU 아키텍처로 부릅니다. gori는 Crystal로 빌드되므로 각 플랫폼은 컴파일러 자체의 플랫폼 지원 수준에도 영향을 받습니다.
Tier 1
Tier 1은 "gori 전부가 그대로 동작하는" 플랫폼입니다. 각 플랫폼은 다음을 만족합니다.
- 모든 GitHub Release에 사전 빌드 바이너리가 올라가고, curl 설치 스크립트와 Homebrew로 설치할 수 있습니다.
- CI나 릴리스 과정에서 소스로 빌드되고, 릴리스 바이너리는 게시 전에 실제로 실행해 봅니다.
- 매일 쓰입니다. gori는 macOS에서 개발되고, 스펙 스위트는 CI의 Linux x86_64에서 돕니다(PR마다 변경에 대응하는 스펙,
main푸시마다 전체 스위트). - 플랫폼 고유의 알려진 한계가 없습니다.
| 대상 | 릴리스 자산 | 그 밖의 채널 | 검증 방식 |
|---|---|---|---|
| macOS arm64 (Apple Silicon) | gori-v*-osx-arm64.tar.gz |
Nix | 일상 개발 환경. 릴리스 빌드가 패키징한 tarball에서 --version 실행 |
| macOS x86_64 (Intel) | gori-v*-osx-x86_64.tar.gz |
— | 릴리스 빌드가 패키징한 tarball에서 --version 실행 |
| Linux x86_64 | gori-v*-linux-x86_64 (정적, musl) |
AUR, Snap, Nix, Docker | PR마다 변경에 대응하는 스펙, main 푸시마다 전체 스펙 스위트. 릴리스 바이너리는 정적 링크 여부 확인 후 실행 |
| Linux arm64 | gori-v*-linux-arm64 (정적, musl) |
Nix, Docker | main 푸시마다 Docker 이미지를 네이티브로 빌드. 릴리스 바이너리는 정적 링크 여부 확인 후 실행 |
macOS와 Linux arm64에서는 CI가 스펙 스위트를 돌리지 않습니다. 그래서 이 대상에서만 나타나는 회귀는 CI가 아니라 실사용에서 발견됩니다.
Tier 2
Tier 2는 "동작하지만 알려진 한계가 있는" 플랫폼입니다. 자체 CI에서 빌드되고 통과하며 릴리스 바이너리도 나오지만, 아래와 같은 알려진 한계가 있을 수 있습니다.
| 대상 | 릴리스 자산 | 그 밖의 채널 | 검증 방식 |
|---|---|---|---|
| Windows x86_64 | gori-v*-windows-x86_64.exe (정적) |
Chocolatey | Crystal 코드를 건드리는 모든 PR마다: 네이티브 빌드, HTTP·HTTPS 요청 하나씩을 프록시한 뒤 프로젝트에서 다시 읽는 스모크 테스트, 실제 Windows 의사 콘솔(ConPTY)에서 TUI 구동, 파일 단위로 나눈 스펙 스위트 |
Windows 릴리스 바이너리는 v0.8.0부터 제공됩니다.
Windows에서 알려진 한계
| 영역 | Windows에서는 |
|---|---|
| 콘솔 | TUI는 VT 시퀀스를 처리하는 콘솔(Windows 10 1809 이상)이 필요합니다. Windows Terminal을 쓰세요. .exe를 더블클릭하거나 cmd.exe에서 열리는 기본 콘솔 창에서는 글꼴에 따라 테두리 선이 빠지거나 일부 기호가 겹쳐 보일 수 있습니다. |
| 시그널 | POSIX 시그널이 없습니다. Ctrl-C와 Ctrl-Break는 INT로, 콘솔 창 닫기·로그오프·종료는 TERM으로 처리합니다. 다만 후자는 Windows가 곧바로 프로세스를 끝내므로 정리 작업에 쓸 시간이 거의 없습니다. |
gori run shell |
이 명령이 만드는 CA 번들은 시스템 루트 인증서에서 출발하는데, gori는 그 위치를 Unix 경로에서만 찾습니다. 그래서 Windows에서는 SSL_CERT_FILE이 이미 번들을 가리키고 있지 않은 한 gori 루트만 담기고, 그 셸의 도구는 gori가 가로채지 않는 호스트(패스스루 호스트, NO_PROXY 대상)에서 TLS 검증에 실패합니다. 전체 번들을 SSL_CERT_FILE로 먼저 export해 두면 피할 수 있습니다. 이곳의 기본 --print 문법은 PowerShell입니다. |
| 파일 권한 | 루트 CA 키의 0600 같은 POSIX 모드가 적용되지 않습니다. GORI_HOME(%USERPROFILE%\.gori) 아래 파일의 접근 권한은 그 폴더 설정을 따릅니다. |
gori update |
Windows는 실행 중인 .exe를 덮어쓰지 못하므로, 기존 파일을 옆으로 옮긴 뒤 새 파일을 그 자리에 둡니다. 기존 파일이 아직 실행 중이면 남은 .gori-update.old.* 파일은 다음 gori update가 지웁니다. Chocolatey로 설치했다면 직접 교체하지 않고 choco upgrade gori -y만 출력합니다. gori를 닫고 관리자 셸에서 실행하세요. |
| 설치 스크립트 | curl 설치 스크립트는 macOS와 Linux 전용입니다. Chocolatey나 직접 다운로드를 쓰세요. |
| gori가 보내는 메시지 | Claude Code의 인박스 소켓은 Unix 소켓이라 Windows에서는 찾지 못합니다. 운영자 메시지는 대신 다음 도구 결과나 operator_messages로 Claude Code에 전달됩니다. |
| Statusline 명령 | statusline.command는 /bin/sh -c가 아니라 cmd.exe /d /s /c로 실행되므로, POSIX 셸 스크립트는 Windows용으로 바꿔야 합니다(또는 PATH에 sh가 있어야 합니다). |
| 테스트 범위 | 레거시 스키마 마이그레이션 스펙 파일 두 개(spec/store/*_autoincrement_migration_spec.cr)는 Windows에서 한 프로세스로 연달아 돌리면 멈추기 때문에 건너뜁니다. 그 마이그레이션 이전에 만든 프로젝트 데이터베이스의 업그레이드는 POSIX에서만 검증됩니다. |
지원하지 않는 플랫폼
릴리스 바이너리도, 패키지도, CI도 없습니다. 일부는 소스에서 빌드할 수 있을지 모르지만 그렇다는 걸 확인하는 절차는 없습니다.
| 플랫폼 | 비고 |
|---|---|
| Windows arm64 | gori 빌드 없음 |
| 32비트 x86·ARM Linux | gori 빌드 없음 |
| 32비트 Windows | gori 빌드 없음 |
| FreeBSD, OpenBSD | 소스 빌드 미검증 |
| 그 밖의 BSD, Android, Solaris | 소스 빌드 미검증 |