Mã nguồn Adobe Photoshop 1.0.1 được công bố năm 2013
(computerhistory.org)- Photoshop, công cụ đã trở thành biểu tượng của chỉnh sửa ảnh số, khởi đầu từ một chương trình cá nhân vào năm 1987, rồi qua việc Adobe phân phối và trở thành sản phẩm thương mại vào năm 1990
- Computer History Museum đã công bố mã nguồn Photoshop 1.0.1 cho mục đích phi thương mại với sự cho phép của Adobe Systems Inc.
- Mã được công bố gồm 179 tệp, khoảng 128.000 dòng, phần lớn là Pascal và hợp ngữ 68000
- Thư viện ứng dụng MacApp được Apple cấp phép không nằm trong phạm vi công bố, đồng thời việc tái phân phối và sử dụng thương mại cũng bị hạn chế
- Grady Booch nhận xét rằng trong mã thời kỳ đầu có thể thấy thiết kế được cấu trúc tốt và kiến trúc nền tảng nối tiếp đến Photoshop hiện đại
Khởi đầu và thương mại hóa Photoshop
- Thomas Knoll, khi còn là nghiên cứu sinh tiến sĩ về thị giác máy tính tại University of Michigan, đã viết một chương trình hiển thị và chỉnh sửa ảnh số vào năm 1987
- John Knoll, làm việc tại Industrial Light & Magic, thấy chương trình này hữu ích cho chỉnh sửa ảnh, nhưng ban đầu họ không có ý định biến nó thành sản phẩm
- Tên ban đầu là Display, và khi các tính năng dần trở nên tinh vi hơn, đến mùa hè năm 1988 họ nhận định nó có thể trở thành sản phẩm thương mại
- Hai anh em đổi tên thành Photoshop, và nhà sản xuất máy quét slide Barneyscan đã bán kèm khoảng 200 bản phiên bản 0.87 dưới tên Barneyscan XP
Adobe và việc phát hành Photoshop 1.0
- Theo đề xuất của giám đốc nghệ thuật Russell Brown, Adobe quyết định mua giấy phép để phân phối một phiên bản Photoshop được cải tiến
- Hợp đồng được hoàn tất vào tháng 4 năm 1989, và Photoshop 1.0 bắt đầu được xuất xưởng từ đầu năm 1990
- Trong 10 năm sau đó, Photoshop đã bán được hơn 3 triệu bản
- “Photoshop” trở nên phổ biến đến mức trong từ điển trực tuyến Merriam-Webster, nó được dùng như một động từ chỉ việc thay đổi ảnh số bằng Photoshop hoặc phần mềm chỉnh sửa ảnh khác
Mã nguồn Photoshop 1.0.1 được công bố
- Computer History Museum, với sự cho phép của Adobe Systems Inc., đã công bố mã nguồn Photoshop 1.0.1 phiên bản năm 1990 cho mục đích phi thương mại
- Phần lớn mã được đưa vào, nhưng thư viện ứng dụng MacApp do Apple cấp phép thì bị loại trừ
- Thư mục nén có 179 tệp, gồm khoảng 128.000 dòng mã
- Khoảng 75% là Pascal
- Khoảng 15% là hợp ngữ Motorola 68000
- Phần còn lại là nhiều loại dữ liệu khác nhau
- Photoshop thời kỳ đầu được viết chủ yếu bằng Pascal cho Apple Macintosh, còn các phần cần hiệu suất thực thi cao sử dụng mã máy cho Motorola 68000
- Thomas Knoll cho biết ở phiên bản 1 ông là kỹ sư duy nhất, còn ở phiên bản 2 có hai kỹ sư
- Thomas phụ trách chương trình ứng dụng cơ bản, còn John viết nhiều plugin xử lý ảnh
Tải xuống và điều kiện giấy phép
- Để tải mã xuống, cần đồng ý với các điều kiện giấy phép
- Giấy phép chỉ cho phép sử dụng phi thương mại, và không cấp quyền đăng bản sao ở nơi khác trên web để tái cấp phép cho bên thứ ba
- Tài liệu liên quan:
Cấu trúc mã dưới góc nhìn của Grady Booch
- Grady Booch ví trải nghiệm mở mã nguồn Photoshop 1.0 với việc Howard Carter lần đầu mở lăng mộ Tutankhamun
- Mã được đánh giá là một hệ thống có cấu trúc rất tốt, với interface và abstraction được tách biệt nhất quán
- Mỗi cặp interface và implementation nhìn chung có một kiểu chính, giúp dễ lần theo các quyết định thiết kế đã component hóa các abstraction
- Nhờ cách đặt tên nhất quán, các phương thức được chia tách hợp lý và phần triển khai đơn giản, việc nắm bắt cấu trúc hệ thống tương đối dễ
- Photoshop 1.0 cho thấy các cấu trúc nền tảng vẫn còn tồn tại dưới dạng phát triển hơn trong các triển khai hiện đại
- Tile và filter được nhắc đến như những cấu trúc tiêu biểu
- Bao gồm abstraction bộ nhớ ảo để xử lý những ảnh lớn hơn rất nhiều so với display buffer hoặc bộ nhớ chính
- Photoshop 1.0 chỉ có hơn 100.000 dòng mã một chút, nhưng các phiên bản hiện đại có hơn 10 triệu dòng
- Cả khi đó lẫn hiện nay, rất nhiều mã liên quan đến nhập/xuất và các định dạng tệp đa dạng mà Photoshop phải xử lý
- Mã nguồn phiên bản 1.0 hầu như không có chú thích, và phần lớn chú thích nằm ở các đoạn hợp ngữ
- Booch cho rằng mã dễ đọc nên việc thiếu chú thích không phải là vấn đề, thậm chí chú thích có thể đã gây cản trở
- Trong mã cũng còn lại các dấu vết của thời kỳ đó
- Mã xử lý phần mềm máy quét Thunderscan của Andy Herzfield
- Hỗ trợ định dạng tệp đồ họa raster TARGA thời kỳ đầu
- Một số tham chiếu đến Barneyscan
Tính năng và hạn chế của Photoshop 1.0
- Màn hình Photoshop thời kỳ đầu hiển thị các công cụ có thể sử dụng
- Brush có thể chọn không chỉ màu mà cả kích thước và texture
- Cung cấp các công cụ chọn tinh vi và nhiều bộ lọc ảnh
- Một trong những tính năng quan trọng còn thiếu là khả năng chia ảnh thành nhiều layer, tính năng này được bổ sung trong phiên bản 3 vào năm 1994
- Trang tùy chọn cho phép tùy biến một số tính năng
- Các lựa chọn phông chữ, cỡ chữ và kiểu chữ còn hạn chế
- Văn bản được nhập trong hộp thoại rồi chuyển vào ảnh
1 bình luận
Ý kiến trên Hacker News
Có người kể rằng khi làm ở Adobe vào những năm 2000, họ đã cố gắng lưu trữ mã nguồn của Photoshop, Illustrator, PostScript và các ứng dụng khác
Bản sao lưu gốc trên đĩa mềm Mac của Thomas Knoll vẫn còn, nên họ mang một chiếc Mac Plus ra, dùng cáp nối tiếp và Kermit để chuyển tệp sang laptop, và phiên bản đầu tiên là 0.54 đề ngày 6 tháng 7 năm 1988
Các tệp trên đĩa mềm thuộc nhiều định dạng lưu trữ nén cũ khác nhau nhưng phần lớn vẫn đọc được, và toàn bộ mã tìm thấy đều được lưu trên một máy chủ Perforce đặc biệt
Đáng tiếc là bản sao lưu Illustrator sớm nhất lại nằm trong một ổ đĩa ngoài duy nhất đã hỏng
Khi đó có phản hồi rằng tương tác giao diện không được tốt lắm; giờ thì khó đánh giá, nhưng FreeHand từng nhanh chóng nổi tiếng rồi sau đó biến mất
Có một bài viết tổng hợp rất rõ những gì cần để build ứng dụng từ mã nguồn này: http://basalgangster.macgui.com/RetroMacComputing/The_Long_V...
Không có nhiều người sở hữu kiểu kiến thức như vậy
RSS bên mình vẫn hoạt động tốt, nhưng Miniflux báo
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 timeoutCó người nhớ từng đến Adobe vào giữa những năm 90 để trao đổi mã nguồn
PhotoShop dựa trên MacApp, và Adobe có một lớp chạy trên Windows
Hai bên đã trao đổi engine SQL đang phát triển; trong phần mã mang về nhà chắc chắn có một phần của PhotoShop, nhưng không nhiều, chủ yếu là đoạn mã tính toán không gian màu kỳ lạ mà họ đã bỏ qua
Họ muốn xem lại mã nguồn để tìm xem còn dấu vết nào của MacApp hay không
Cũng có thể sau giữa thập niên 90 thì mọi thứ đã thay đổi hoàn toàn
Ít khi nghe về những trường hợp như vậy, nên cũng tò mò liệu còn câu chuyện trao đổi mã nào khác không
Dĩ nhiên là vậy, nhưng nó đúng là phần mềm cồng kềnh
Think Class Library đã cứu rất nhiều lập trình viên, và có khi Greg Dow vẫn còn làm ở Adobe
Nghĩ lại thì PowerPlant còn tốt hơn TCL: https://en.wikipedia.org/wiki/PowerPlant
Điều đáng ngạc nhiên là trải nghiệm người dùng đến giờ nhìn chung vẫn gần như vậy
Tầm nhìn của các kỹ sư đời đầu thật đáng nể
Nhưng giờ mỗi lần mở ứng dụng lên lại thấy bực, và khoảng thời gian duy nhất nó cho cảm giác nhanh nhạy trên desktop là lúc MacBook Pro M1 mới ra mắt và Adobe Photoshop có bản beta cho Silicon
Thời đó đã qua rồi và giờ nó lại chậm như cũ
Nỗi đau là có thật, và khi đó nếu muốn dùng nghiêm túc thì SGI Indigo với 96MB RAM là lựa chọn tốt hơn
Đến cuối những năm 90 thì nó chạy hợp nhất trên 9500, và ngay cả lúc đó cũng cần trọn 1GB RAM
Tôi vẫn đang dùng một bản crack phát hành khoảng năm 2022, bản đầu tiên hỗ trợ M1, và nó vẫn nhanh như 2 năm trước
Scott Belsky giờ đã là nhà đầu tư, và ông viết về quá trình đưa BeHance và Adobe sang hướng kinh tế thuê bao
Dù là sách hay, nó cũng hơi giống một cuốn tự lực dành cho tầng lớp điều hành đang bị thu hẹp
Dù vậy, hệ sinh thái mã nguồn mở cho công việc nghệ thuật và xử lý hình ảnh hiện nay vẫn tốt hơn bao giờ hết; trên thực tế, mọi người bị đẩy ra ngoài vì các công cụ chuyên nghiệp đã trở nên quá đắt đỏ để theo kịp nếu không có sự hỗ trợ từ cộng đồng
Bài viết năm 2013 mà lại nói về Adobe Photoshop 1.x của năm 1990
Đã xem mã nguồn, nhưng sẽ rất tuyệt nếu có thể hiểu điều gì khiến đoạn mã đó trở nên đẹp và thanh nhã
Khi học Rust, tôi cũng có cùng trăn trở vì ngay cả với một game Snake đơn giản cũng có quá nhiều lựa chọn khi quyết định cấu trúc mã
Trong lúc nghĩ cách xây dựng các hàm và UI hoạt động trên một “không gian”, tôi đã nghĩ đến Photoshop và 3ds Max; tìm được kho lưu trữ này thật tuyệt, nhưng đơn giản là tôi không hiểu nổi
Từ góc độ học tập thì nó rất thú vị và tôi muốn nâng cao kỹ năng về các mẫu thiết kế, nên nếu có tài liệu hay để học về cấu trúc mã thì mong được giới thiệu
Trước đây tôi từng rất khổ sở vì trừu tượng hóa, mẫu thiết kế và cấu trúc
Nhưng rồi tôi nhận ra rằng khi làm việc với mã lệnh mang tính mệnh lệnh “thật sự”, tạm quên class đi, và để toàn bộ mã trong cùng một file, thì mã sẽ tự bắt đầu hình thành cấu trúc riêng
Điều đó không có nghĩa đây là con đường duy nhất, nhưng tôi cảm thấy hướng đối tượng có thể trở thành thứ cản trở vì khiến người ta bị chôn vùi trong quá nhiều lựa chọn
Cấu trúc cơ bản của một ứng dụng MacApp là tài liệu, và framework MacApp sẽ phân phối sự kiện tới các handler
Đã lâu rồi tôi không làm với ứng dụng MacApp, nhưng theo tôi nhớ thì cấu trúc cơ bản là như vậy
Có vẻ như MacApp không được đính kèm, nhưng có thể nó vẫn tồn tại ở đâu đó; Adobe từng port MacApp sang Windows để tránh phải viết lại mọi thứ
Sau đó đến một thời điểm nào đó, có lẽ họ đã thay nó bằng lớp trừu tượng riêng của mình
John Knoll là người phụ trách hiệu ứng hình ảnh cho loạt Star Wars tiền truyện, và sau đó tham gia Rogue One
Phim tài liệu hậu trường quá trình làm loạt tiền truyện vẫn xem rất ổn cho tới giờ: https://youtu.be/da8s9m4zEpo?si=5y5gHUMxztwVzMny
https://www.imdb.com/title/tt19896784/?ref_=nv_sr_srsg_0_tt_...
Ông là tác giả của một giáo trình kinh điển trong lĩnh vực phát hiện bức xạ
Có đoạn nói rằng “họ hẳn đã không tưởng tượng được sẽ thêm một từ vào từ điển”, nhưng Adobe muốn ngăn điều này vì nó dẫn đến sự phổ thông hóa thương hiệu
Trong hướng dẫn về thương hiệu có các ví dụ như “luôn viết hoa và sử dụng thương hiệu ở đúng dạng. Ví dụ đúng: The image was enhanced with Adobe® Photoshop® Elements software. Ví dụ sai: The image was photoshopped.”
[1]: https://en.wikipedia.org/wiki/Generic_trademark
[2]: https://www.adobe.com/legal/permissions/trademarks.html
Tôi nhớ Xerox cũng đã thua một vụ kiện lớn liên quan đến chuyện này
[1] Ví dụ: https://www.consumerreports.org/consumerist/15-product-trade...
https://www.youtube.com/watch?v=rRi8LptvFZY
Về lâu dài có lẽ vẫn không được, nhưng giờ tôi chắc chắn đã ý thức rằng Velcro là một tên thương hiệu
Tôi nhớ đã nhìn thấy Photoshop thời kỳ trước Adobe tại một bệnh viện ở Ann Arbor
Tôi đã nghĩ nó thực sự đáng kinh ngạc
Xin bổ sung một điều: phiên bản MacApp họ dùng khi đó là framework ứng dụng Apple Pascal và gần như chắc chắn vẫn đang ở giai đoạn beta
Trong số mã mà Tom Knoll làm cho công ty chúng tôi với tư cách nhà thầu, có một thuật toán B-spline được dùng làm nền tảng cho trình chỉnh sửa đường cong
Nên khen ngợi những công ty công khai mã nguồn của các phiên bản phần mềm cũ
Mong rằng sau này sẽ có thêm nhiều công ty làm như vậy
Tuy vậy, cũng lo rằng một phần đáng kể các mã nguồn kiểu này có lẽ đã bị thất lạc theo thời gian và qua nhiều lần mua lại liên tiếp
Việc dùng quản lý phiên bản rộng rãi cũng là hiện tượng khá gần đây, nên ngay cả khi còn tồn tại thì rất có thể chúng nằm trong các bản sao lưu trên băng từ ngẫu nhiên, đĩa mềm hoặc bản in đóng trong bìa còng
“Chúng tôi thu thập và bảo tồn phần mềm dưới dạng mã nguồn vì phần mềm chứa đựng tri thức kỹ thuật và khoa học của chúng ta, và nhân loại không thể chấp nhận rủi ro đánh mất nó
Phần mềm là một phần quý giá của di sản văn hóa
Chúng tôi quản lý và làm cho mọi phần mềm mình thu thập được có thể truy cập, vì chỉ thông qua chia sẻ mới có thể bảo đảm việc bảo tồn trong thời gian rất dài”
Được sáng lập bởi người bạn của tôi là Roberto Di Cosmo
Ý tôi là bao gồm cả hợp đồng pháp lý tiêu chuẩn thực sự để xử phạt việc rò rỉ sớm
Đây có thể là một dịch vụ khá tự động hóa và ít tốn công
Công ty có thể mirror kho lưu trữ git lên một máy chủ riêng tư do tổ chức bảo tồn quản lý, và tổ chức bảo tồn có thể tạo một kho lưu trữ công khai rỗng tương ứng
Sau đó, mỗi giờ một agent sẽ quét kho riêng tư và chỉ đồng bộ sang kho công khai những commit có thời điểm commit cũ hơn 10 năm
Các ref cũng được đồng bộ cùng lúc, nhưng được viết lại như thể đã dùng
git filter-branchđể loại bỏ mọi commit mới hơn 10 năm, rồi bỏ đi các ref trở nên rỗng sau khi lọc