2P by GN⁺ | ★ favorite | 댓글 2개

Winamp

소개

  • Winamp는 1997년에 출시된 멀티미디어 플레이어로, 다양한 오디오 포맷과의 호환성 및 유연성으로 유명함
  • Nullsoft가 개발하였으며, 수백만 명의 사용자들 사이에서 큰 인기를 끌었음
  • 개발이 한동안 중단되었으나, 이제 소스 코드가 공개되어 커뮤니티가 플레이어를 개선하고 현대화할 수 있게 되었음

사용법

  • Winamp 데스크톱 클라이언트 빌드는 현재 Visual Studio 2019 (VS2019)와 Intel IPP 라이브러리를 기반으로 함
  • Winamp를 빌드하는 방법은 여러 가지가 있음
    1. build_winampAll_2019.cmd 스크립트 파일을 사용하여 x86/x64 (디버그 및 릴리스) 버전 4개를 빌드함. 이 경우 Visual Studio IDE는 실행되지 않음
    2. winampAll_2019.sln 파일을 사용하여 Visual Studio IDE에서 빌드 및 디버그를 수행함

종속성

  • build_winampAll_2019.cmd 스크립트 파일을 사용하여 x86/x64 (디버그 및 릴리스) 버전 4개를 빌드함. 이 경우 Visual Studio IDE는 실행되지 않음
  • winampAll_2019.sln 파일을 사용하여 Visual Studio IDE에서 빌드 및 디버그를 수행함
libvpx
libmpg123
OpenSSL
  • openssl-1.0.1u를 사용해야 함
  • 정적 버전의 라이브러리를 빌드하기 위해 build_vs_2019_openssl_x86.cmdbuild_vs_2019_openssl_64.cmd를 실행함
  • OpenSSL을 빌드하려면 7-Zip, NASM, Perl을 설치해야 함
DirectX 9 SDK
  • DirectX 9 SDK (2010년 6월)를 Microsoft에서 가져와 수정 후 아카이브로 패킹함
  • unpack_microsoft_directx_sdk_2010.cmd를 실행하여 압축을 풀음
Microsoft ATLMFC lib 수정
  • C:\Program Files (x86)\Microsoft VisualStudio\2019\Community\VC\Tools\MSVC\14.24.28314\atlmfc\include\atltransactionmanager.h 파일의 427번째 줄을 return ::DeleteFile((LPTSTR)lpFileName);에서 return DeleteFile((LPTSTR)lpFileName);로 변경함
Intel IPP 6.1.1.035
  • Intel IPP 6.1.1.035를 가져와 수정 후 아카이브로 패킹함
  • unpack_intel_ipp_6.1.1.035.cmd를 실행하여 압축을 풀음

GN⁺의 정리

  • Winamp는 다양한 오디오 포맷과의 호환성으로 인해 여전히 많은 사용자들에게 사랑받고 있음
  • 소스 코드가 공개되어 커뮤니티가 플레이어를 개선하고 현대화할 수 있는 기회를 제공함
  • Visual Studio 2019와 여러 라이브러리를 사용하여 빌드할 수 있으며, 다양한 종속성을 처리해야 함
  • Winamp와 유사한 기능을 제공하는 다른 멀티미디어 플레이어로는 VLC Media Player와 foobar2000이 있음

댓글과 토론

이슈 보니 라이선스로 말이 많네요

Hacker News 의견들
  • 프로젝트에 사람들이 어떻게 기여하길 기대하는지 궁금함. 라이선스 4절은 개선, 기능 추가, 버그 수정을 공식 저장소에 제출하라고 하지만, 5절의 제한은 코드 포크나 수정본 배포를 금지함
    그러면 GitHub의 표준 방식인 “저장소를 포크하고, 브랜치에서 수정하고, 풀 리퀘스트를 보내는” 흐름 자체가 라이선스 위반이 됨

    • 이슈를 열고 설명란에 패치를 직접 타이핑하면 됨
      다만 패치를 테스트하거나 디버깅할 수는 없음. 그건 코드베이스의 수정본을 만드는 일이어서 금지되어 있으니까. 그냥 열병 같은 상상에서 나온 내용을 관행의 도움 없이 바로 적으면 됨. 라이선스에 충분하다면 코드에도 충분하겠지
    • 포크에는 두 가지 의미가 있음. 하나는 GitHub의 “Fork” 버튼인데, 실제로는 저장소를 자기 계정으로 복제하는 것에 가까움
      다른 하나는 “프로젝트를 포크한다”는 뜻으로, 별도 이름으로 대안 계보를 적극 개발하고 배포하는 것임. GitHub의 풀 리퀘스트 흐름은 써도 괜찮다고 봄. 여기서는 GitHub가 이미 자리 잡은 “fork” 의미와 어긋나는 이름을 붙인 게 아쉬움. 사실 “clone”이어야 했음
    • GitHub 이용약관은 사용자가 모든 공개 저장소를 포크할 권리를 준다고 되어 있음
    • 여기서 말하는 “fork”는 오픈소스 쪽의 넓은 의미, 즉 NeoVim이 Vim을 포크한 것처럼 자기 버전을 만들어 다른 방향으로 가져가는 걸 뜻하는 듯함
      GitHub는 기여용 저장소 사본을 만들 때도 “fork”라는 말을 쓸 뿐임
    • 그냥 사람들이 라이선스를 무시하길 기대하는 것 같음
      대부분은 그렇게 할 것이고, 기여자에게 변호사를 들이밀지도 않을 것이며, 세상은 계속 굴러갈 것임
  • 이 프로젝트의 미래를 위해 지금 할 수 있는 최선은 관여하지 않는 것임. 검토하거나 컴파일하려고 개인 작업공간에 복제하는 것조차 현재 라이선스 태도에 비하면 과한 참여임
    라이선스 입장을 바꿨다는 HN 글이 올라오면 다시 확인하겠지만, 그 전까지는 이 탭을 닫고 잊는 편이 낫겠음

    • 원저자인 Justin Frankel은 Reaper DAW도 만든 전설적인 인물인데, 이 건에 대해 이렇게 답했음
      질문: WinAMP 소스가 공식 공개됐는데, 새롭고 멋진 기능을 해킹해 넣고 싶은 마음이 있나?
      답: 그런 마음이 있었다 해도 라이선스 조건 때문에 사라졌을 것임, lol. 조건이 쓰인 방식이 완전히 터무니없음. 예를 들어 “소프트웨어의 포크 버전을 만들거나, 유지하거나, 배포할 수 없다”고 되어 있음. 그러면 어떤 변경도 “포크 버전을 만드는 것”으로 볼 여지가 있음. 의도대로 조금 더 관대하게 해석한다 해도 조건은 형편없음. 사양하겠음
  • 아주 오래전 EFNet의 #mpeg3에서 어울리다가, Justin Frankel이 이걸 작업하던 시절에 알게 됐던 기억이 있음
    앱에 쓸 스킨과 트레이 아이콘 몇 개를 만들어 줬고, 그중 일부가 여기에 들어 있음. 어떤 게 전부 내 것인지는 100% 기억나지 않지만 punchlabel은 확실히 내 것임. 크레딧에도 내 이름이 있음: https://github.com/WinampDesktop/winamp/blob/0695744fd658c42...

  • 이들은 GitHub에 대량의 DMCA 요청을 보내다가 자기 저장소가 GitHub에서 내려가게 만들거나, 아니면 저작권을 잃을 위험을 안고 스스로 GitHub에서 내리게 될 것 같음
    포크는 GitHub의 핵심 기능임. 포크 정책은 비공개 저장소에서만 설정할 수 있는데, 이건 공개 저장소임. 라이선스는 포크를 허용하지 않고, 이미 포크가 6개 있음. 보통 저작권은 상표권과 달리 선택적 집행으로 잃지 않지만, 이 경우 권리자가 라이선스 위반을 아주 쉽게 만들었고 위반자 목록에도 완전히 접근 가능함. 권리를 적극 방어하지 않으면 법원에서 웃음거리가 될 듯함. GitHub 입장에서도 다루고 싶지 않을 상황임. 플랫폼에서 가장 많이 누르는 버튼 중 하나를 클릭했더니 갑자기 법적 문제가 되는 끔찍한 사용자 경험이니까

    • 다른 사람들이 말했듯이, GitHub는 이미 이용약관으로 그 부분을 덮어뒀음. 모든 공개 저장소는 포크 가능
    • 현재 410개 포크가 있음
  • Winamp와 약간의 인연이 있음. 예전에 꽤 인기 있는 플러그인을 만들었음
    이건 Winamp 3의 소스 코드인데, Winamp 2를 C++로 완전히 다시 쓴 버전임. 내 생각에는 지나치게 복잡하고 과하게 설계됐음. Justin Frankel의 원래 소스 코드는 C였음

    • “제공된” 것은 AOL에서 Radionomy로 팔릴 때 넘겨진 5.666 소스 묶음의 축소판과, 이후 5.9.2 릴리스까지의 반복 작업 결과물임
      그래서 1.x → 2.x → 5.x 개발 과정의 여러 해와 그동안 여러 사람이 손댄 결과가 뒤섞인, 말하자면 난장판임. Winamp3의 큰 부분도 들어 있는데, 그건 AOL 시절에 이미 제대로 오픈소스로 공개됐던 부분임. 이번처럼 심하게 제한된 라이선스와는 다름. 다만 코드 전달물을 만들 때 전용 Winamp3 저장소는 제공된 적이 없던 것으로 기억함. 11년 전 기억이 맞다면 그렇다는 뜻임
      -dro
    • Frankel의 원래 코드는 어디엔가 있나? 그가 예전에 C++를 C보다 선호하지만, 실제로는 클래스가 있는 C처럼 썼다고 말했던 기억이 있음. Frankel은 내 영웅임
  • 1999년 여름 대학 시절, 우리 집은 파티에서 MP3를 쓴 첫 집이었음. 대부분은 CD 체인저를 썼고, 긁히고 얼룩진 디스크가 많아서 음악이 계속 튀었음
    우리는 완전 디지털로 갔고 시대를 앞섰음. 파티는 지하실에서 열렸고, 컴퓨터는 남는 침실에 잠가둔 뒤 선과 스피커를 지하 메인 공간으로 뺐음. Winamp를 셔플로 돌렸고, 몇 시간 동안 한 번도 튀지 않았으며 누가 음악을 봐줄 필요도 없었음. 좋은 추억을 만들어 준 Winamp에 고마움

    • 1999년 여름에 “완전 디지털”이었다는 말은 좀 그렇다. 나는 1993년에 DAT 레코더가 있었고, DAT 워크맨도 있었음
  • “open”이라는 단어를 왜곡한 것임. 라이선스 조건은 재배포나 재판매를 허용하지 않는데, 이는 일반적으로 받아들여지는 오픈소스의 조건임
    제목이나 저장소 어디에도 “open source”라고 쓰지 않은 점에 주목해야 함. “소스가 이제 열렸다”가 아니라, source available이라고 불렀어야 함

    • 이 라이선스는 스스로 카피레프트 라이선스라고 주장하지만, 라이선스가 요구하는 배포 제한이 있으면 카피레프트일 수 없음
      “카피레프트 라이선스”라는 주장을 없애거나, 배포 제한을 “이 프로그램의 수정본을 배포할 경우 수정본을 Winamp라고 부르면 안 된다” 정도로 완화했으면 함
  • 짜증나지 않는 유일한 음악 플레이어였음. 경쟁 제품들이 정답이라고 여겼던 잡동사니와 투박한 그래픽 없이, 간결한 인터페이스로 자기 일만 했음

    • 잡동사니와 투박한 그래픽이 없었다고? 그 플레이어의 재미 중 하나가 아무 스킨이나 씌워보는 것 아니었나? 다른 걸 떠올리는 건가?
    • 요즘 내 “최애”는 Tidal임. 그 사람들은 안정적인 재생 경험도 못 만들고, UI도 사용자에게 적대적인 요소와 방식, 오작동으로 가득함
      내가 채용하는 입장이면 Tidal 출신은 기회가 없을 것임
    • 맞음. 그리고 지금은 더 나은 걸 찾았음: cmus
      이 괴물을 만난 뒤로는 다른 걸로 돌아간 적이 없음
    • Windows용 미니멀 음악 플레이어를 원하면 Tray Player를 확인해보면 됨
  • 웃긴 건 최신 커밋이 “Removing code which is not open”[0]인데, 그 말은 그 코드를 Git 기록에 남겨둠으로써 다른 누군가의 라이선스 조건을 침해하고 있다는 뜻임
    [0] https://github.com/WinampDesktop/winamp/commit/0a4b7d32d0906...

    • https://github.com/WinampDesktop/winamp/issues/11를 보면 자기들 코드이긴 한데, 소스를 공개하지 않기로 한 다른 서비스 쪽 코드인 듯함
    • 하! 지난 한두 시간 동안 다른 것들도 빠르게 빼고 있음. 예를 들면 이런 헤더가 붙은 파일들이 여럿 있었음
      Copyright 2000-2002 Dolby Laboratories, Inc. All Rights
      Reserved. Do not copy. Do not distribute.
      Confidential information.
      (C) copyright Fraunhofer - IIS (1998)
      All Rights Reserved
  • SHOUTcast 서버 소프트웨어의 무료 사본을 원한다면, 이 저장소에서 그 코드를 불법 공유하고 있음