# Swift Static Linux SDK

> Clean Markdown view of GeekNews topic #15311. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=15311](https://news.hada.io/topic?id=15311)
- GeekNews Markdown: [https://news.hada.io/topic/15311.md](https://news.hada.io/topic/15311.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-06-13T09:46:44+09:00
- Updated: 2024-06-13T09:46:44+09:00
- Original source: [swift.org](https://www.swift.org/documentation/articles/static-linux-getting-started.html)
- Points: 6
- Comments: 2

## Topic Body

- 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` 명령으로 패키지 종속성을 수정할 수 있음

## Comments



### Comment 26244

- Author: cichol
- Created: 2024-06-14T00:38:07+09:00
- Points: 1

이제 이걸 써서 좀 더 seamless하게 Swift로 Android iOS 동시 개발을 지원하는 뭔가가 나올듯한 느낌이 ..

### Comment 26207

- Author: neo
- Created: 2024-06-13T09:46:44+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40651054) 
- **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 개발자가 작은 프로젝트에 익숙한 언어를 사용하고 싶을 때 외에는 이유가 없을 것 같음.
