본문 바로가기
C.W.K.
Stream
Lesson 04 of 05 · published

오라클이지, 아키텍처가 아냐

~12 min · bounded-replacement, oracle, movist, reverse-engineering

Level 0릴 입문자
0 XP0/39 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"Movist 는 패리티 oracle 이야, 아키텍처가 아니라."

경쟁자한테 배우는 두 방식

대체하려는 도구한테서 배우는 방식은 완전히 달라, 두 갈래야. 하나는 '어떻게 만들었나' 를 베끼는 거. 내부, 구조, 선택들. 다른 하나는 oracle 로 쓰는 거. '내 결과 맞아?' 엔 답해주지만 거기까지 어떻게 갔는지는 안 알려주는, 믿을 만한 잣대. Ashen Reel 은 두 번째를 엄격하게 골라.

테스트에서 oracle 은 그냥 비교 기준이야. Movist 가 파일 틀고, Ashen Reel 이 같은 파일 틀고, 출력을 맞대봐. 필수 행동에서 둘이 맞으면 그 행동은 증명된 거고. Movist 는 어떻게 디코딩하고 렌더하고 seek 할지는 하나도 안 알려줘. 끝에 나온 결과가 맞는지만 알려줄 뿐이야.

내부는 안 보이고 상관도 없어

소스 없이도 Mac 앱이 뭘 링크하는지 엿볼 수 있어. otool -L 을 Movist 에 대보면 FFmpeg 라이브러리를 싣고 AVFoundation, VideoToolbox, CoreVideo 를 링크하는 게 보여. 이건 쓸모 있는 사실이면서 동시에 함정이야.

쓸모 있는 이유. Movist 의 출력 행동이 진짜 비교 대상이라는 걸 증명하거든. 하드웨어 가속되고 색 관리되는 네이티브 파이프라인이니까, 그걸 맞추는 게 의미 있는 기준이야. 함정인 이유. '그럼 같은 프레임워크 링크하고 같은 파이프라인 베끼면 되겠네' 로 결론 내리고 싶어지거든. Ashen Reel 은 안 그래. 자기 이유로 libmpv 를 고르고(Track 2), 출력이 맞는지 눈으로 증명해. 경쟁자 부품 목록은 네 설계도가 아니야.

oracle 은 네가 언제 맞췄는지 알려주지, 어떻게 만들지는 절대 안 알려줘. 경쟁자 내부 구조를 베끼기 시작하는 순간, 넌 네 도구 만들기를 멈추고 걔네 클론을 떠맡은 거야. 걔네 맥락은 하나도 없이, 걔네 우연만 전부 안고서.

oracle 이 너한테 틀렸을 때

oracle 이 최종 발언권을 갖는 건 아냐. Movist 의 행동이 CWK 원칙이랑 부딪히는 곳에선 Ashen Reel 의 아키텍처 문서가 대놓고 Movist 를 이겨. 데이터 소유권, 소스 불변성, 네트워크 브라우저 없음 같은 원칙 말이야. Movist 는 SMB 공유를 신나게 뒤지고 자격증명도 저장해. Ashen Reel 은 거절하고. 그 행동이 패리티보다 더 중요한 선을 넘으니까. oracle 은 잣대지 입법자가 아니거든.

문서도 일 따라 쪼개. Ashen Reel 은 셋을 둬. 아키텍처 문서는 제품이랑 데이터 경계를 맡고, 패리티 계약은 어떤 Movist 행동이 범위 안이고 어떻게 비교할지를 맡고, 구현 계획은 빌드 순서를 맡아. 셋이 안 맞으면 아키텍처 문서가 이겨. 문서끼리 소유권을 명확히 나누는 건 앱끼리 나누는 거랑 똑같은 규율이야.

그리고 oracle 은 선반에 남겨둬. Movist 랑 QuickTime 은 마이그레이션 내내 '폴백' 이라 라벨 붙여서 깔아둬. bounded 대체는 첫날부터 비상구를 없애는 게 아니라, 자기를 증명해서 전환을 얻어내는 거니까.

Code

소스 없이 앱의 출력 대상 읽기·bash
# What does the rival actually link against? Its parts list is public.
# (otool ships with the Xcode command line tools.)
otool -L /Applications/Movist.app/Contents/MacOS/Movist

# You'll see entries like:
#   .../AVFoundation.framework/AVFoundation
#   .../VideoToolbox.framework/VideoToolbox
#   .../CoreVideo.framework/CoreVideo
#   @rpath/libavcodec... (bundled FFmpeg)
#
# Conclusion: its OUTPUT (hardware-decoded, color-managed) is the
# comparison target. NOT an instruction to copy the same pipeline.

External links

Exercise

어떤 행동에서 맞추고 싶은 도구를 찾아. 소스 안 읽고 바깥에서만 알아낼 수 있는 걸 두 개 대봐. 뭘 링크하는지, 어떤 파일을 건드리는지, 주어진 입력에 어떻게 반응하는지. 그다음, 그 도구 행동이 네 거랑 부딪히면 어떤 '네 원칙' 이 이길지 한 문장으로 적어. 그 원칙을 못 대면, 넌 대체가 아니라 클론을 만드는 중이야.
Hint
바깥에서만 보이는 신호들. 링크된 프레임워크(otool -L), 건드린 파일(fs_usage 나 전후 diff), 입력에 대한 눈에 보이는 반응. 이기는 원칙은 '같은데 틀린' 것보다 '다른데 맞는' 걸 택하겠다는 선이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.