1P by GN⁺ | ★ favorite | 댓글 1개
  • LibrePods는 AirPods와 Apple 기기 사이의 독점 프로토콜을 구현해, Apple 기기 전용 AirPods 기능을 Linux와 Android 같은 비 Apple 플랫폼에서 사용할 수 있게 하는 프로젝트임
  • 지원 기능은 플랫폼별로 다르며, 청취 모드 변경, 착용 감지, 배터리 상태, 대화 인지, 자동 연결은 Linux와 Android에서 구현되어 잘 동작함
  • 일부 기능은 VendorID spoofing이 필요하거나 아직 계획 단계이며, Head Gestures는 Android만 지원하고 Linux에서는 구현하지 않을 예정임
  • Find My, 공간 오디오, 심박수 모니터링, 고품질 양방향 오디오는 아직 미완성이거나 탐색 중이며, Android에서는 일부 기능이 root를 필요로 할 가능성이 있음
  • Android 앱과 Linux 재작성 일부에는 AI 생성 코드가 포함되어 있고, 프로젝트는 GPLv3 이상으로 배포되지만 LibrePods 이름·로고·브랜딩 사용 권리는 별도로 제한됨

LibrePods가 하는 일

  • LibrePods는 AirPods와 Apple 기기 사이에서 데이터를 교환하는 독점 프로토콜을 구현함
  • 이 구현으로 비 Apple 플랫폼에서도 다음 같은 AirPods 기능을 사용할 수 있음
    • 노이즈 제어 모드 변경
    • 빠른 착용 감지
    • 정확한 배터리 상태
    • Head Gestures
    • Conversational Awareness
    • 기타 AirPods 설정 기능
  • 설치 문서는 플랫폼별로 분리되어 있음

플랫폼별 기능 지원

  • Linux와 Android 모두 구현되어 잘 동작하는 기능

    • 청취 모드 변경
    • 착용 감지
    • 배터리 상태
    • AirPods 이름 변경
      • Android에서는 이름 변경 후 다시 페어링해야 할 수 있음
    • Conversational Awareness
    • AirPods 자동 연결
  • Android만 지원되는 기능

    • Head Gestures
    • 기타 접근성 설정
      • Press speed
      • Press and Hold duration
      • Noise Cancellation with single AirPod
      • Volume control on swipe
      • Volume swipe speed
    • 기타 일반 설정
      • Press and Hold로 청취 모드 순환 또는 디지털 어시스턴트 호출
      • 통화 제어 설정
      • Personalized volume
      • Microphone side
      • 잠들 때 미디어 일시정지
      • Off listening mode 활성화
    • VendorID spoofing이 필요한 기능
    • Loud Sound Reduction
    • Hearing Aid
    • Transparency Mode customization
    • Multi-device connectivity
    • 상태 표기 기준은 다음과 같음
    • ✅: 구현되어 잘 동작함
    • ⚪: VendorID spoofing 필요, 위험 부담은 사용자가 감수해야 함
    • 🔴: 아직 미구현, 계획됨
    • ⛔: 구현하지 않을 예정
    • ❓: 알 수 없음

VendorID spoofing과 추가 기능

  • VendorID spoofing은 DID Profile의 VendorID를 Apple의 값으로 바꿔 여러 특수 기능에 접근하는 방식임
  • Linux에서는 /etc/bluetooth/main.conf의 DeviceID를 수정해 사용할 수 있음
    • 설정 줄: DeviceID = bluetooth:004C:0000:0000
  • Android에서는 Xposed가 사용 가능하고 LibrePods 모듈이 활성화된 경우 앱 설정에서 act as Apple device를 켤 수 있음
  • Multi-device Connectivity는 최대 2대 기기를 AirPods에 동시에 연결해 오디오와 제어를 모두 사용할 수 있게 함
    • Android가 AirPods를 가져가면 Apple 기기에는 Apple 기기처럼 "Move to iPhone" 알림이 표시됨
    • 다른 기기가 가져가면 Android에도 팝업이 표시됨
  • 접근성 및 보청기 관련 설정도 구성 가능함
    • Transparency Mode의 amplification, balance, tone, conversation boost, ambient noise reduction
    • Loud Sound Reduction
    • Hearing Aid 커스터마이징과 audiogram 결과 설정
    • 앱은 더 높은 정밀도가 필요하다는 이유로 청력 테스트 기능은 제공하지 않음

아직 미완성인 기능과 범위 제한

  • Find My 관련 기능은 계획되어 있지만 추가 리버스 엔지니어링이 필요하고 Android에서는 root가 필요할 수 있음
    • AirPods를 Find My 네트워크에 추가
    • 충전 케이스에서 소리 재생
    • 두고 왔을 때 알림
    • 케이스 충전 소리 토글
  • Spatial Audio는 현재 Android에 head tracking 정보를 제공해 OS가 HRTF를 수행하게 하지 않음
    • 완전히 탐색되지 않았고 root가 필요할 수 있음
    • 스테레오 사운드를 공간화하는 기능은 프로젝트 범위 밖이며 제공되지 않을 예정임
    • 많은 OEM이 자체 구현을 갖고 있음
  • Heart Rate Monitoring은 AirPods Pro 3 이후 모델을 대상으로 작업 중임
    • 구현되더라도 Android에서는 root가 필요할 가능성이 큼
  • High quality two-way audio는 iOS/iPadOS에서 AirPods가 마이크 오디오 스트림을 AACP로 보내는 동안 A2DP를 계속 사용할 수 있는 기능과 관련됨
    • Android에서는 오디오와 더 깊은 통합이 필요해 root가 필요할 가능성이 큼

프로토콜, 리버스 엔지니어링, AI 사용

  • 프로토콜 정보는 Nojus의 Wireshark dissector 플러그인 pabloaul/apple-wireshark를 참고할 수 있음
  • LibrePods 구현 대부분에는 해당 dissector가 사용되지 않았고, 프로젝트 작성자가 dissector 제작 전에 프로토콜을 직접 리버스 엔지니어링함
  • 다만 고품질 양방향 오디오와 공간 오디오 같은 향후 기능에는 해당 리버스 엔지니어링 작업이 필요했다고 밝힘
  • Android 앱에서 완전히 AI 생성된 부분
    • Head Gestures 전체 로직과 UI
    • r2와 Xposed 모듈을 이용한 offset setup 양쪽 버전
    • Troubleshooter와 LogCollector
  • Android 앱의 나머지 주요 부분은 수동으로 작성됨
    • background service
    • AACP와 ATT Bluetooth manager 클래스
    • 전체 UI와 작은 컴포넌트들
  • Linux 재작성에서는 aacp.rsatt.rs가 Kotlin에서 Rust로 AI 번역됨
    • media_controller.rs 일부, 주로 Pulse 통합도 AI 생성됨
  • 일부 UI 컴포넌트는 Apache License 2.0의 Kyant0's demo app에서 가져옴

대체 앱, 라이선스, 상표 고지

  • 다른 플랫폼이나 조건에서 사용할 수 있는 대체 앱이 제시됨
  • LibrePods는 GPLv3 이상 조건의 자유 소프트웨어로 배포됨
  • GPL은 LibrePods 이름, 로고, 브랜딩 사용 권리를 부여하지 않음
  • LibrePods 이름과 로고는 공식 프로젝트와의 제휴, 보증, 연관성을 암시하는 방식으로 허가 없이 사용할 수 없음
  • Android 앱에 사용된 SF Pro 폰트는 Apple Inc.의 자산이며, 향후 버전에서 오픈 대안으로 교체될 예정임
  • AirPods, AirPods Pro, AirPods Max, AirPods 로고는 Apple Inc.의 상표이며 LibrePods 프로젝트는 Apple Inc.와 제휴하거나 보증받지 않음
  • librepods.org는 LibrePods 프로젝트의 공식 웹사이트가 아니며, 푸터에서 저작권 주장과 LibrePods 로고 사용으로 공식 웹사이트라고 부정확하게 주장한다고 경고함

댓글과 토론

Hacker News 의견들
  • 헷갈릴 수 있어 덧붙이면, AirPods는 이미 다른 기기에서 일반 Bluetooth 이어버드로 동작함
    이 프로젝트는 Apple 제품에 통합된 일부 추가 기능과 인터페이스를 구현한 것임

    • 뭐가 헷갈리는지 모르겠음. README 맨 위에 이미 설명돼 있음
      “LibrePods allows you to use AirPods features that are exclusive to Apple devices. It implements the proprietary protocol used to exchange data between AirPods and Apple devices”라고 쓰여 있고, 이어서 기능 표도 있음
    • AirPods를 사는 이유는 그게 아님. iPhone에서 Apple TV, MBP, Mini로 자연스럽게 이어지는 점이 핵심임
      더 싼 가격에 더 좋은 소리를 내는 제품도 있지만, 음질은 이 제품 이야기의 가장 작은 부분에 가까움
    • 기억이 맞다면 최소 2021년부터 AirPods의 배터리 잔량을 보여주는 Android 앱이 여럿 있었음
      일반 Bluetooth 오디오 출력/입력 장치로 연결되는 것 외의 필수 기능에 대해서도 그랬음
  • 이 프로젝트는 훌륭함. 언젠가 AirDrop도 해방되면 좋겠음
    https://github.com/seemoo-lab/opendrop는 유망해 보였지만 멈춘 것 같고, 언젠가는 가능하길 바람

  • Apple이 앞으로 이게 작동할 수 있는 모든 경로를 최대한 막으려 할 거라고 확신하지만 않았다면, AirPods를 살 동기가 됐을 수도 있음

    • AirPods는 이미 Apple 생태계 밖에서도 작동함
      이건 Apple 운영체제에 이미 통합된 추가 기능용 인터페이스를 누군가 구현한 것에 가까움
    • AirPods는 케이스에서 충전 중이고 xOS 기기와 페어링돼 있을 때 업데이트됨
      버전 고정을 하려면 Apple 제품에 절대 연결되지 않도록 해야 함
    • Apple이 왜 AirPods를 더 나쁜 구매로 만들려고 하겠음? Apple은 Mac에서 어떤 운영체제를 돌리든 허용하고, 그쪽에서는 적극적으로 적대적이진 않지만 커뮤니티를 돕지도 않음
      그래도 이미 Apple 컴퓨터나 휴대폰 사용자가 아니라면 Sony WF-1000XM6를 추천하겠음. 사용자 경험은 더 나쁘고 약간 버그가 있다고들 하지만, 소리는 더 좋을 가능성이 큼
    • AirPods는 오프라인 장치라 지금 한 쌍을 사면 무기한 작동할 것임
      다만 내가 산 하드웨어를 쓰려고 이런 우회까지 요구하지 않는 제조사를 보상해 주는 편이 더 나을 수도 있음
    • 나라면 안 삼. 가격대를 막론하고 시장에서 가장 불편한 이어버드임
  • 이전 논의: https://news.ycombinator.com/item?id=45941596

  • 여기에 들어간 작업과 해킹은 존중함
    하지만 이렇게 적대적인 회사를 왜 AirPods 구매로 지원해야 하는지는 모르겠음. 이를 막는 패치가 나와도 놀랍지 않음

    • Apple에 대해 가장 고민되는 지점이 이거임. 하드웨어는 정말 뛰어나지만, 자기 하드웨어에서의 사용자 자유에 맞서는 태도 때문에 절대 쓰지 않게 됨
      우회해서 해킹할 수 있더라도, 사용자를 통제하고 보살펴야 할 대상으로 보는 문화가 거슬림
    • 이건 적대적이라기보다 게으른 쪽에 가까움. AirPods는 Bluetooth가 제공하는 모든 것에는 표준 Bluetooth를 사용함
      비 Apple 플랫폼에서 안 되는 건 설정, 눌러 짜기 동작 변경, 펌웨어 업데이트 로딩 같은 부분임
      표준 Bluetooth만으로는 이런 걸 할 방법이 없어서 전용 앱이 필요함. Apple이 다른 플랫폼용 전용 앱을 만들지 않았을 뿐이고, 누군가 리소스를 들여 앱을 만드는 걸 Apple이 신경 쓸 이유도 없음. 어쨌든 AirPods는 팔렸고 앱 제작 비용은 다른 사람이 냈으니 Apple은 이김
    • 뭐가 그렇게 적대적인지 모르겠음
      일반 Bluetooth 연결 위에 기능을 추가하되, 완전히 통제하고 품질 보증할 수 있는 플랫폼에서만 제공하기로 선택하면 안 되는 건가?
      기능을 독점 제공하는 것만으로도 정말 적대적인가? 한 회사가 자사 제품 여러 개를 같이 쓸 때의 이점을 제공하면 안 되나?
      아니면 Apple이 이걸 패치할 거라고 가정하기 때문에 적대적이라는 뜻인가?
      1. 재미를 위해서
      2. 중고 구매자, 선물 받은 사람, 과거에 산 사람 등에게 추가 자유를 주기 위해서
  • 수년간 AirPods를 여러 쌍 써 왔는데, 일부 기능은 이번에 처음 알게 됨
    Apple 지원 여부를 표시하는 세 번째 열도 있었으면 하는 생각까지 들었음. 물론 농담임

  • 지금 AirPods를 갖고 있지 않고 Apple 쪽을 잘 따라가지 않는 사람에게, AirPods를 비 Apple 기기에 페어링하면 어떤 기능을 잃는지 설명해 주면 유용하겠음

    • 기능 호환성 목록이 있음
  • Linux에서 AirPods를 스피커와 헤드셋으로 동시에 쓸 수 있게 해 주는 줄 알고 기대했음

    • 그 기능을 위한 PR이 있음: https://github.com/librepods-org/librepods/pull/655
      직접 써 보니 잘 작동하는 것 같음. 특허 때문에 막히지 않으면 좋겠음
    • Linux에서도 AirPods를 스피커(재생)와 헤드셋(마이크)으로 동시에 쓸 수 있음
      다만 Bluetooth 프로파일을 HFP(Hands-Free Profile)나 HSP(Headset Profile)로 바꿔야 함
      더 좋은 품질을 위해 이게 기본값이라는 점도 유의해야 함. 이는 Linux가 아니라 Bluetooth 사양 때문임
  • 내가 찾는 핵심 유용 기능은 다른 기기에서도 무제한 멀티포인트를 쓰는 것임
    대부분의 다른 기기가 제공하는 2개 연결은 너무 별로임. 가끔 회사 VoIP 책상 전화에 빠르게 연결할 수 있으면 좋겠음