6P by neo 6달전 | favorite | 댓글 2개
  • 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 명령으로 패키지 종속성을 수정할 수 있음

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

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 개발자가 작은 프로젝트에 익숙한 언어를 사용하고 싶을 때 외에는 이유가 없을 것 같음.