LibrePods: 해방된 AirPods

3 hours ago 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.rs와 att.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 로고 사용으로 공식 웹사이트라고 부정확하게 주장한다고 경고함
Read Entire Article