GN⁺: Swift Static Linux SDK
(swift.org)- Swift는 Apple 플랫폼 외에도 Linux와 Windows 등을 지원함
- Swift Static Linux SDK를 사용하면 외부 의존성 없이 완전히 정적으로 링크된 실행 파일을 빌드할 수 있음
- 이는 모든 Linux 배포판에서 실행 가능함
- macOS에서 개발하고 테스트한 후 Linux 기반 서버에 배포할 수 있음
- 링킹은 컴퓨터 프로그램의 다른 부분을 가져와 참조를 연결하는 과정
- 정적 링킹은 빌드 시점에, 동적 링킹은 런타임에 발생함
- 정적 라이브러리는 개별 오브젝트 파일의 모음이고, 동적 라이브러리는 monolithic임
- 정적 링킹의 장단점:
- 장점: 런타임 오버헤드 없음, 필요한 라이브러리 코드만 포함, 별도 설치된 동적 라이브러리 불필요, 런타임 버전 문제 없음
- 단점: 코드 공유 불가(메모리 사용량 증가), 프로그램 재빌드 없이 종속성 업데이트 불가, 실행 파일 크기 증가
- Linux에서 정적 링킹을 사용하면 배포판에 따른 시스템 라이브러리 종속성을 완전히 제거할 수 있음
- swift.org에서 Open Source 툴체인을 설치해야 함 (Xcode 제공 툴체인 사용 불가)
-
swift sdk install
명령으로 Static Linux SDK를 설치할 수 있음 -
swift build --swift-sdk x86_64-swift-linux-musl
명령으로 x86-64 Linux 바이너리를,swift build --swift-sdk aarch64-swift-linux-musl
명령으로 ARM64 Linux 바이너리를 빌드할 수 있음 - Foundation이나 Swift NIO를 사용하는 Swift 패키지는 그대로 작동함
- C 라이브러리를 사용하는 패키지는 Glibc 대신 Musl을 import하도록 수정해야 함
- Musl은 정적 링킹을 잘 지원하고 실행 파일 배포가 용이한 permissive 라이선스를 가짐
-
swift package edit
명령으로 패키지 종속성을 수정할 수 있음
Hacker News 의견
-
Swift의 새로운 사용자 정의 플랫폼 지원: Swift가 임베디드 시스템과 WASM을 지원하며, 비-애플 GitHub 조직으로 이동한 것은 Swift를 다른 플랫폼으로 확장하는 데 큰 진전임. AI OS 보안 검증에도 사용될 가능성이 흥미로움.
-
Swift 바이너리를 Alpine 컨테이너에서 실행 가능: Swift 바이너리를 Alpine 컨테이너에서 실행할 수 있게 되어 기쁨. musl 지원 작업이 예상보다 빨리 진행됨. 교차 컴파일도 매우 유용함.
-
Debian 지원에 대한 기대: Debian에서 Swift 패키지가 추가되는 것을 보게 되어 기쁨. 개발 VM으로 Debian을 더 많이 사용하게 될 것 같음.
-
임베디드 시스템에서 Swift 사용 기대: C로 임베디드 시스템을 많이 다뤘지만, STM 개발 보드에서 Swift를 시도해보고 싶음.
-
정적 링크의 단점: ASLR이 제대로 작동하지 않거나 하나의 객체만 무작위화됨. 메모리 안전 언어에서는 큰 단점이 아닐 수 있음. 공통 객체를 공유하면 I/O 감소 효과가 있음.
-
배포판 간의 호환성 문제: 특정 배포판이나 버전에서 빌드된 프로그램이 다른 배포판에서 작동하지 않을 수 있음. Swift의 정적 링크 제공은 좋지만, 배포판이 패키지 배포 방식을 선택할 수 있는 것이 최선임.
-
Golang과의 경쟁 가능성: Swift가 배포의 용이성 면에서 Golang과 경쟁할 수 있을 것 같음. 복잡성을 최종 사용자로부터 멀리 밀어냄.
-
크로스 플랫폼 GUI 앱: Swift로 크로스 플랫폼 GUI 앱을 만들면 어떨지 궁금함. SwiftUI는 사용 불가할 것 같지만, Swift를 간단한 스크립트 작성에 사용할 예정임.
-
CentOS 7 이미지 사용 경고: CentOS 7 이미지를 아직도 제공하는 것이 미친 짓 같음. 사용하지 말라는 경고.
-
Swift의 복잡성 증가: Swift가 쉽게 Python을 대체할 수 있었지만, 언어가 복잡해져서 이제는 C++의 아류가 됨.
-
Rust 대신 Swift 사용 이유: 왜 Rust 대신 Swift를 사용해야 하는지에 대한 질문.
-
iOS/SwiftUI 없이 Swift 사용 이유: iOS/SwiftUI 없이 Swift를 사용할 이유가 있는지에 대한 질문. Swift 개발자가 작은 프로젝트에 익숙한 언어를 사용하고 싶을 때 외에는 이유가 없을 것 같음.