2013년에 공개된 Adobe Photoshop 1.0.1 소스 코드
(computerhistory.org)- 디지털 이미지 편집의 대표 도구가 된 Photoshop은 1987년 개인용 프로그램에서 출발해, Adobe 배포를 거쳐 1990년 상용 제품으로 자리 잡음
- Computer History Museum은 Adobe Systems Inc. 허가로 Photoshop 1.0.1 소스 코드를 비상업적 용도로 공개함
- 공개된 코드는 179개 파일, 약 128,000줄 규모이며 Pascal과 68000 어셈블리어가 대부분을 차지함
- Apple에서 라이선스한 MacApp 애플리케이션 라이브러리는 공개 대상에서 제외되며, 재배포와 상업적 사용에도 제한이 있음
- Grady Booch는 초기 코드에서 잘 구조화된 설계와 현대 Photoshop으로 이어지는 기본 구조를 볼 수 있다고 평가함
Photoshop의 시작과 상용화
- Thomas Knoll은 University of Michigan에서 컴퓨터 비전을 연구하던 박사과정 학생으로, 1987년에 디지털 이미지를 표시하고 수정하는 프로그램을 작성함
- Industrial Light & Magic에서 일하던 John Knoll은 이 프로그램이 사진 편집에 유용하다고 봤지만, 처음부터 제품으로 만들 의도는 없었음
- 처음 이름은 Display였고, 기능이 점차 정교해지면서 1988년 여름에는 상용 제품이 될 수 있다고 판단함
- 두 형제는 이름을 Photoshop으로 바꿨고, 슬라이드 스캐너 제조사 Barneyscan은 버전 0.87 약 200개를 Barneyscan XP라는 이름으로 번들 제공함
Adobe와 Photoshop 1.0 출시
- Adobe는 아트 디렉터 Russell Brown의 권유를 받아 Photoshop의 향상된 버전을 배포할 라이선스를 구매하기로 결정함
- 계약은 1989년 4월 완료됐고, Photoshop 1.0은 1990년 초부터 출하됨
- 이후 10년 동안 Photoshop은 300만 개 이상 판매됨
- “Photoshop”은 Merriam-Webster 온라인 사전에서 Photoshop 또는 다른 이미지 편집 소프트웨어로 디지털 이미지를 변경한다는 동사로 쓰일 만큼 널리 퍼짐
공개된 Photoshop 1.0.1 소스 코드
- Computer History Museum은 Adobe Systems Inc. 허가를 받아 1990년 버전 Photoshop 1.0.1 소스 코드를 비상업적 용도로 공개함
- 대부분의 코드가 포함됐지만, Apple에서 라이선스한 MacApp 애플리케이션 라이브러리는 제외됨
- 압축 폴더에는 179개 파일이 있으며, 약 128,000줄의 코드로 구성됨
- 약 75% 는 Pascal
- 약 15% 는 Motorola 68000 어셈블리어
- 나머지는 여러 종류의 데이터
- 초기 Photoshop은 Apple Macintosh용으로 주로 Pascal로 작성됐고, 실행 효율이 중요한 부분에는 Motorola 68000용 기계어가 사용됨
- Thomas Knoll은 버전 1에서는 자신이 유일한 엔지니어였고, 버전 2에서는 엔지니어가 두 명이었다고 밝힘
- Thomas는 기본 애플리케이션 프로그램을 맡았고, John은 여러 이미지 처리 플러그인을 작성함
다운로드와 라이선스 조건
- 코드를 다운로드하려면 라이선스 조건에 동의해야 함
- 라이선스는 비상업적 사용만 허용하며, 웹의 다른 곳에 복사본을 게시해 제3자에게 다시 라이선스할 권리는 제공하지 않음
- 관련 자료:
Grady Booch가 본 코드 구조
- Grady Booch는 Photoshop 1.0 소스 코드를 열어보는 경험을 투탕카멘의 무덤을 처음 연 Howard Carter에 비유함
- 코드는 인터페이스와 추상화가 일관되게 분리된 매우 잘 구조화된 시스템으로 평가됨
- 각 인터페이스와 구현 조합마다 대체로 하나의 주요 타입이 있으며, 추상화를 컴포넌트화한 설계 결정을 따라가기 쉬움
- 일관된 이름, 적절히 나뉜 메서드, 단순한 구현 덕분에 시스템 구조를 파악하기 쉬운 편임
- Photoshop 1.0에는 현대 구현에도 더 발전된 형태로 남아 있는 기본 구조가 보임
- 타일과 필터가 대표적인 구조로 언급됨
- 디스플레이 버퍼나 주 메모리보다 훨씬 큰 이미지를 다루기 위한 가상 메모리 추상화가 포함됨
- Photoshop 1.0은 10만 줄을 조금 넘는 규모였지만, 현대 버전은 1,000만 줄 이상임
- 당시와 현재 모두 많은 코드는 입출력과 Photoshop이 처리해야 하는 다양한 파일 형식에 관련됨
- 버전 1.0 소스 코드에는 주석이 거의 없고, 대부분은 어셈블리어 조각에 붙어 있음
- Booch는 코드가 읽기 쉬워 주석 부족이 문제가 아니며, 주석이 오히려 방해가 됐을 수도 있다고 봄
- 코드 안에는 당시의 흔적도 남아 있음
- Andy Herzfield의 Thunderscan 스캐너 소프트웨어 처리 코드
- 초기 TARGA 래스터 그래픽 파일 형식 지원
- Barneyscan에 대한 일부 참조
Photoshop 1.0의 기능과 한계
- 초기 Photoshop 화면에는 사용할 수 있는 도구들이 표시됨
- 브러시는 색상뿐 아니라 크기와 텍스처도 선택할 수 있었음
- 정교한 선택 도구와 다양한 이미지 필터가 제공됨
- 중요한 누락 기능 중 하나는 이미지를 여러 레이어로 나누는 기능이었고, 이 기능은 1994년 버전 3에서 추가됨
- 환경설정 페이지에서는 일부 기능을 사용자화할 수 있었음
- 글꼴, 글꼴 크기, 글꼴 스타일 선택지는 제한적이었음
- 텍스트는 대화상자에 입력한 뒤 이미지 안으로 옮기는 방식이었음
댓글과 토론
Hacker News 의견들
-
2000년대에 Adobe에서 일하면서 Photoshop, Illustrator, PostScript와 다른 앱들의 소스 코드 보관을 시도했음
Thomas Knoll의 원본 Mac 플로피 백업이 남아 있어서 Mac Plus를 가져와 직렬 케이블과 Kermit으로 노트북에 파일을 옮겼고, 첫 버전은 1988년 7월 6일자 0.54였음
플로피의 파일들은 여러 오래된 압축 아카이브 형식이었지만 대부분 읽을 수 있었고, 찾은 모든 코드를 특별한 Perforce 서버에 보관했음
아쉽게도 가장 초기의 Illustrator 백업은 고장 난 단일 외장 디스크 드라이브에 들어 있었음- Illustrator 담당자는 Palo Alto에 있었고 접근하기 쉬운 사람이었음
당시에는 인터페이스 상호작용이 별로라는 피드백이 있었고, 지금은 판단하기 어렵지만 FreeHand가 빠르게 인기를 얻었다가 이후 사라졌음
- Illustrator 담당자는 Palo Alto에 있었고 접근하기 쉬운 사람이었음
-
이 소스 코드로 앱을 빌드하려면 무엇이 필요한지 잘 정리한 글이 있음: http://basalgangster.macgui.com/RetroMacComputing/The_Long_V...
- 이 사이트의 다른 글들을 더 읽어보니 놀라움
이런 종류의 지식을 가진 사람이 많지 않음 - 피드 리더에 추가할 때 문제가 있는지 궁금함
RSS는 내 쪽에서는 잘 되지만, Miniflux에서는This website is too slow and the request timed out: Get "http://basalgangster.macgui.com/RetroMacComputing/The_Long_View/…;: dial tcp 209.182.219.107:80: i/o timeout라고 나옴
- 이 사이트의 다른 글들을 더 읽어보니 놀라움
-
90년대 중반에 Adobe와 소스 코드 교환을 하러 갔던 기억이 있음
PhotoShop은 MacApp 기반이었고, Adobe에는 Windows에서 동작하는 계층이 있었음
우리는 진행 중이던 SQL 엔진을 교환했고, 집에 가져온 코드에는 PhotoShop 일부가 확실히 들어 있었지만 많지는 않았고, 무시했던 특이한 색 공간 계산 코드 정도였음
소스를 살펴보며 MacApp의 흔적이 남아 있는지 보고 싶음
90년대 중반 이후로 전부 바뀌었을 수도 있음- 코드 교환이라는 발상이 멋짐
이런 사례를 별로 들어본 적이 없는데, 다른 코드 교환 이야기가 있는지 궁금함 - 실제로 예외로 명시되어 있음: “All the code is here with the exception of the MacApp applications library that was licensed from Apple”
- Photoshop에서 여러 해 일했는데, 그 코드는 지금도 남아 있음
- Windows의 MacApp이라니
물론 그랬겠지만 꽤 비대한 소프트웨어였음
Think Class Library가 많은 개발자를 살렸고, Greg Dow는 지금도 Adobe에서 일하고 있을지도 모름
생각해보니 PowerPlant는 TCL보다 더 나았음: https://en.wikipedia.org/wiki/PowerPlant
- 코드 교환이라는 발상이 멋짐
-
사용자 경험이 지금도 대체로 같다는 점이 놀라움
초기 엔지니어들의 비전이 대단했음
하지만 요즘 앱을 열 때마다 짜증이 나고, 데스크톱에서 빠릿하게 느껴졌던 유일한 시기는 MacBook Pro M1이 처음 나왔고 Adobe Photoshop의 Silicon 베타가 있던 짧은 기간뿐이었음
그 시절은 끝났고 다시 느려졌음- 90년대 초에 써봤는지는 모르겠지만, RAM 4MB짜리 Mac에서는 Gaussian Blur 되돌리기에 5~10분쯤 걸렸음
고통이 진짜였고, 당시 제대로 쓰려면 RAM 96MB의 SGI Indigo가 나았음
90년대 후반에는 9500에서 가장 잘 맞았고, 그때도 RAM 1GB 전체가 필요했음 - 사용자 경험이 좋아서 그런 건지, 아니면 바꾸면 사용자들이 집단 반발해서 불가능한 건지 궁금함
- 그냥 다운그레이드하면 됨
아직 2022년쯤 나온, 처음으로 M1을 지원한 크랙 버전을 쓰고 있는데 2년 전처럼 여전히 빠릿함 - The Messy Middle는 예전 BeHance CEO가 Adobe의 클라우드 제품을 어떻게 다시 만들었고 어떻게 할지 정리한 훌륭한 책임
Scott Belsky는 지금은 투자자가 되었고, BeHance와 Adobe를 임대 경제 쪽으로 팔아넘긴 과정을 썼음
훌륭한 책이라고는 하지만, 줄어드는 임원들을 위한 자기계발서에 가깝기도 함
그래도 예술·이미지 작업용 오픈소스 생태계는 그 어느 때보다 좋아졌는데, 실제로는 커뮤니티 지원 없이는 따라오지 못하는 전문 도구들이 너무 비싸져서 모두가 밀려났기 때문임 - 아직 오래된 CS6 라이선스를 쓰고 있고, 앱 안에서는 빠릿하지만 실행할 때는 여전히 시간이 걸림
- 90년대 초에 써봤는지는 모르겠지만, RAM 4MB짜리 Mac에서는 Gaussian Blur 되돌리기에 5~10분쯤 걸렸음
-
2013년 글에 1990년의 Adobe Photoshop 1.x라니
- 그 코드의 절반쯤은 아직 photoshop.adobe.com에서 WASM으로 돌고 있을 것 같음
-
소스 코드를 봤지만 무엇이 그 코드를 아름답고 우아하게 만드는지 이해할 수 있으면 좋겠음
Rust를 배우면서, 단순한 Snake 게임조차 코드 구조를 정할 때 선택지가 너무 많아 까다롭다고 느끼며 비슷한 고민을 했음
“공간” 위에서 동작하는 함수와 UI를 어떻게 만들지 생각하다가 Photoshop이나 3ds Max를 떠올렸고, 이 저장소를 찾은 건 정말 좋았지만 단순히 이해를 못 하겠음
학습 관점에서 흥미롭고 설계 패턴 실력을 늘리고 싶으니, 코드 구조를 배울 좋은 자료가 있으면 알려주면 좋겠음- 이 코드나 개인 배경에 대해 많이 말할 수는 없지만, 솔직히 한 걸음 물러서서 원칙을 살펴보는 게 좋다고 봄
예전에는 추상화, 설계 패턴, 구조 때문에 많이 괴로웠음
하지만 “진짜” 명령형 코드로 작업하고, 클래스를 잠시 잊고, 모든 코드를 같은 파일에 두면 코드가 스스로 구조를 갖추기 시작한다는 걸 깨달았음
이게 유일한 길이라는 뜻은 아니지만, 객체 지향은 선택지에 파묻히게 만들어 방해가 될 수 있다고 느낌 - 이 코드는 MacApp을 사용했는데, 반복 코드를 대신 처리하려던 초기 프레임워크 중 하나였음
MacApp 앱의 기본 구조는 문서이고, MacApp 프레임워크가 이벤트를 핸들러로 디스패치함
MacApp 앱을 작업한 지 오래됐지만 기본 구조는 그랬던 것으로 기억함
MacApp 자체는 포함되지 않은 듯하지만 어딘가에 있을 가능성이 있고, Adobe는 한때 모든 것을 다시 쓰지 않으려고 MacApp을 Windows로 포팅했음
이후 어느 시점에 자체 추상화 계층으로 대체했을 것으로 봄
- 이 코드나 개인 배경에 대해 많이 말할 수는 없지만, 솔직히 한 걸음 물러서서 원칙을 살펴보는 게 좋다고 봄
-
John Knoll은 Star Wars 프리퀄의 시각 효과 책임자였고, 이후 Rogue One에 참여했음
프리퀄의 제작 비하인드 다큐멘터리는 지금 봐도 괜찮음: https://youtu.be/da8s9m4zEpo?si=5y5gHUMxztwVzMny- Rogue One의 감독은 아니고, 시각 효과 감독, 총괄 프로듀서, 원안 크레딧임: https://www.imdb.com/title/tt3748528/reference/
- Disney+에 있는 ILM 다부작 시리즈 Light & Magic을 아주 재미있게 봤음
https://www.imdb.com/title/tt19896784/?ref_=nv_sr_srsg_0_tt_... - 그의 아버지를 만난 적이 있는데, University of Michigan 원자력공학과의 명예교수였음
방사선 검출 분야의 고전 교과서를 쓴 분임
-
“사전에 단어를 하나 추가하게 될 줄은 상상하지 못했을 것”이라는 부분이 있는데, Adobe는 이것이 상표의 보통명사화로 이어지기 때문에 막으려 함
상표 가이드라인에는 “항상 대문자로 쓰고 올바른 형태로 상표를 사용하라. 올바른 예: The image was enhanced with Adobe® Photoshop® Elements software. 잘못된 예: The image was photoshopped.” 같은 예시가 있음
[1]: https://en.wikipedia.org/wiki/Generic_trademark
[2]: https://www.adobe.com/legal/permissions/trademarks.html- 이제는 꽤 확실히 보통명사화 영역에 들어간 것 같음
Xerox도 관련해서 큰 소송에서 졌던 것으로 기억함
[1] 예: https://www.consumerreports.org/consumerist/15-product-trade... - 그런 압박은 이해하지만, 아무도 그렇게 말하지는 않을 것임
- Gimp로 이미지를 photoshopped 했음
- Velcro도 같은 일을 훨씬 효과적으로 시도해왔음
https://www.youtube.com/watch?v=rRi8LptvFZY
장기적으로는 그래도 안 되겠지만, 이제 Velcro가 상표명이라는 점은 확실히 의식하게 됨 - 보통명사화가 정말 문제인지 궁금함
- 이제는 꽤 확실히 보통명사화 영역에 들어간 것 같음
-
Adobe 이전의 Photoshop을 Ann Arbor의 병원에서 봤던 기억이 있음
정말 대단하다고 생각했음
한 가지 덧붙이면, 당시 쓰던 MacApp 버전은 Apple Pascal 앱 프레임워크였고 거의 확실히 베타였음
Tom Knoll이 계약자로 우리 회사에서 작업했던 코드 중 B-스플라인 알고리즘을 곡선 편집기의 기반으로 사용했음- 병원에서 그걸로 뭘 하고 있었는지 궁금함
-
오래된 버전의 소프트웨어 소스 코드를 공개하는 회사들은 칭찬받아야 함
앞으로 더 많은 회사가 그렇게 하길 바람
다만 이런 소스 코드 상당수는 시간과 여러 차례의 연속 인수 과정에서 사라졌을까 봐 걱정됨
버전 관리가 널리 쓰인 것도 비교적 최근 현상이라, 남아 있다 해도 임의의 테이프 백업, 플로피 디스크, 바인더 속 출력물에 있을 가능성이 큼- https://www.softwareheritage.org/
“우리는 소프트웨어가 우리의 기술적·과학적 지식을 담고 있으며 인류가 그것을 잃을 위험을 감수할 수 없기 때문에, 소스 코드 형태의 소프트웨어를 수집하고 보존합니다
소프트웨어는 문화유산의 소중한 일부입니다
우리는 수집한 모든 소프트웨어를 관리하고 접근 가능하게 만듭니다
공유해야만 아주 긴 시간 동안 보존을 보장할 수 있기 때문입니다”
친구인 Roberto Di Cosmo가 설립했음 - Internet Archive 같은 조직이 소프트웨어 소스 코드 지연 공개 에스크로 서비스를 제공한다면 많은 회사가 이용할 것 같음
조기 유출을 처벌하는 실제 표준 법률 계약도 포함해서 말임
꽤 자동화되고 손이 덜 가는 서비스가 될 수 있음
회사가 git 저장소를 보존 조직이 관리하는 비공개 서버에 미러링하고, 보존 조직은 대응되는 빈 공개 저장소를 만들 수 있음
이후 매시간 에이전트가 비공개 저장소를 훑어 커밋 시각이 10년보다 오래된 커밋만 공개 저장소로 동기화함
참조도 함께 동기화하되,git filter-branch로 10년보다 최신 커밋을 모두 제거한 것처럼 다시 쓰고, 필터링 후 비어 있는 참조는 버리면 됨
- https://www.softwareheritage.org/