ซอร์สโค้ด Adobe Photoshop 1.0.1 ที่เผยแพร่ในปี 2013
(computerhistory.org)- Photoshop ซึ่งกลายเป็นเครื่องมือหลักด้านการแก้ไขภาพดิจิทัล เริ่มต้นจาก โปรแกรมส่วนบุคคลในปี 1987 ก่อนจะถูกแจกจ่ายผ่าน Adobe และกลายเป็นผลิตภัณฑ์เชิงพาณิชย์ในปี 1990
- Computer History Museum เปิดเผย ซอร์สโค้ด Photoshop 1.0.1 เพื่อการใช้งานที่ไม่ใช่เชิงพาณิชย์ โดยได้รับอนุญาตจาก Adobe Systems Inc.
- โค้ดที่เปิดเผยมี 179 ไฟล์ ขนาดราว 128,000 บรรทัด โดยส่วนใหญ่เป็น Pascal และแอสเซมบลี 68000
- ไลบรารีแอปพลิเคชัน MacApp ที่ได้รับสิทธิ์ใช้งานจาก Apple ไม่รวมอยู่ในการเปิดเผยครั้งนี้ และยังมีข้อจำกัดเรื่องการแจกจ่ายต่อและการใช้งานเชิงพาณิชย์
- Grady Booch ประเมินว่าในโค้ดยุคแรกนี้สามารถเห็นได้ทั้ง การออกแบบที่มีโครงสร้างดี และโครงสร้างพื้นฐานที่สืบทอดมาถึง Photoshop ยุคปัจจุบัน
จุดเริ่มต้นของ Photoshop และการทำเป็นสินค้าเชิงพาณิชย์
- Thomas Knoll เป็นนักศึกษาปริญญาเอกที่กำลังวิจัยด้านคอมพิวเตอร์วิทัศน์ที่ University of Michigan และได้เขียนโปรแกรมสำหรับแสดงผลและแก้ไขภาพดิจิทัลในปี 1987
- John Knoll ซึ่งทำงานอยู่ที่ Industrial Light & Magic มองว่าโปรแกรมนี้มีประโยชน์ต่อการแต่งภาพ แต่ในตอนแรกไม่ได้ตั้งใจจะทำเป็นผลิตภัณฑ์
- ชื่อแรกของโปรแกรมคือ Display และเมื่อความสามารถค่อย ๆ ซับซ้อนขึ้น ทั้งคู่จึงเห็นในช่วงฤดูร้อนปี 1988 ว่าสามารถพัฒนาเป็นผลิตภัณฑ์เชิงพาณิชย์ได้
- สองพี่น้องเปลี่ยนชื่อเป็น Photoshop และผู้ผลิตสไลด์สแกนเนอร์ Barneyscan ได้บันเดิลเวอร์ชัน 0.87 ราว 200 ชุด ภายใต้ชื่อ Barneyscan XP
Adobe และการเปิดตัว Photoshop 1.0
- Adobe ตัดสินใจซื้อสิทธิ์การจัดจำหน่าย Photoshop เวอร์ชันที่พัฒนาปรับปรุงแล้ว ตามคำแนะนำของ Russell Brown ซึ่งเป็น art director
- สัญญาเสร็จสมบูรณ์ใน เดือนเมษายน 1989 และ Photoshop 1.0 เริ่มจัดส่งตั้งแต่ต้นปี 1990
- หลังจากนั้นภายใน 10 ปี Photoshop มียอดขายมากกว่า 3 ล้านชุด
- คำว่า “Photoshop” แพร่หลายมากจนพจนานุกรมออนไลน์ Merriam-Webster ใช้เป็นคำกริยา หมายถึงการเปลี่ยนแปลงภาพดิจิทัลด้วย Photoshop หรือซอฟต์แวร์แก้ไขภาพอื่น
ซอร์สโค้ด Photoshop 1.0.1 ที่ถูกเปิดเผย
- Computer History Museum ได้รับอนุญาตจาก Adobe Systems Inc. ให้เปิดเผย ซอร์สโค้ด Photoshop 1.0.1 เวอร์ชันปี 1990 เพื่อการใช้งานที่ไม่ใช่เชิงพาณิชย์
- แม้จะรวมโค้ดไว้เกือบทั้งหมด แต่ ไลบรารีแอปพลิเคชัน MacApp ที่ได้รับสิทธิ์ใช้งานจาก Apple ถูกตัดออก
- โฟลเดอร์บีบอัดมี 179 ไฟล์ รวมโค้ดประมาณ 128,000 บรรทัด
- ประมาณ 75% เป็น Pascal
- ประมาณ 15% เป็น Motorola 68000 assembly
- ที่เหลือเป็นข้อมูลหลายประเภท
- Photoshop ยุคแรกสำหรับ Apple Macintosh เขียนขึ้นโดยใช้ Pascal เป็นหลัก และใช้ภาษาเครื่องสำหรับ Motorola 68000 ในส่วนที่ต้องการประสิทธิภาพการทำงานสูง
- Thomas Knoll ระบุว่าในเวอร์ชัน 1 เขาเป็นวิศวกรเพียงคนเดียว และในเวอร์ชัน 2 มีวิศวกรทั้งหมดสองคน
- Thomas รับผิดชอบโปรแกรมแอปพลิเคชันหลัก ส่วน John เขียน ปลั๊กอิน สำหรับประมวลผลภาพหลายตัว
การดาวน์โหลดและเงื่อนไขสิทธิ์ใช้งาน
- ผู้ที่ต้องการดาวน์โหลดโค้ดต้องยอมรับเงื่อนไขสิทธิ์ใช้งานก่อน
- สิทธิ์ใช้งานอนุญาตเฉพาะ การใช้งานที่ไม่ใช่เชิงพาณิชย์ และไม่ให้สิทธิ์นำสำเนาไปเผยแพร่ในที่อื่นบนเว็บเพื่ออนุญาตต่อแก่บุคคลที่สาม
- เอกสารที่เกี่ยวข้อง:
โครงสร้างโค้ดในมุมมองของ Grady Booch
- Grady Booch เปรียบประสบการณ์การเปิดดูซอร์สโค้ด Photoshop 1.0 กับ Howard Carter ที่เปิดสุสานของตุตันคามุนเป็นครั้งแรก
- โค้ดนี้ถูกประเมินว่าเป็นระบบที่มีโครงสร้างดีมาก โดยแยก interface และ abstraction ออกจากกันอย่างสม่ำเสมอ
- ในแต่ละคู่ของ interface และ implementation โดยทั่วไปจะมี type หลักอยู่หนึ่งตัว ทำให้ติดตามการตัดสินใจออกแบบที่ทำ abstraction เป็นคอมโพเนนต์ได้ค่อนข้างง่าย
- ด้วยการตั้งชื่อที่สม่ำเสมอ เมธอดที่แบ่งอย่างเหมาะสม และ implementation ที่เรียบง่าย จึงทำให้เข้าใจโครงสร้างของระบบได้ไม่ยาก
- ใน Photoshop 1.0 สามารถเห็นโครงสร้างพื้นฐานที่ยังคงอยู่ในเวอร์ชันปัจจุบันในรูปแบบที่พัฒนาขึ้นแล้ว
- tile และ filter ถูกยกเป็นตัวอย่างของโครงสร้างสำคัญ
- มี abstraction ของ virtual memory สำหรับจัดการภาพที่มีขนาดใหญ่กว่าทั้ง display buffer หรือหน่วยความจำหลักมาก
- แม้ Photoshop 1.0 จะมีขนาดเพียงมากกว่า 100,000 บรรทัดเล็กน้อย แต่เวอร์ชันสมัยใหม่มีมากกว่า 10 ล้านบรรทัด
- ทั้งในอดีตและปัจจุบัน โค้ดจำนวนมากเกี่ยวข้องกับ I/O และ ไฟล์ฟอร์แมต หลากหลายแบบที่ Photoshop ต้องรองรับ
- ในซอร์สโค้ดเวอร์ชัน 1.0 แทบไม่มีคอมเมนต์ และส่วนใหญ่จะติดอยู่กับชิ้นส่วน assembly
- Booch มองว่าโค้ดอ่านง่ายพอจนการขาดคอมเมนต์ไม่ใช่ปัญหา และคอมเมนต์อาจกลายเป็นสิ่งรบกวนเสียด้วยซ้ำ
- ภายในโค้ดยังหลงเหลือร่องรอยของยุคนั้นอยู่
- โค้ดสำหรับจัดการซอฟต์แวร์สแกนเนอร์ Thunderscan ของ Andy Herzfield
- การรองรับไฟล์กราฟิกแบบแรสเตอร์ TARGA ในยุคแรก
- การอ้างอิงถึง Barneyscan บางส่วน
ความสามารถและข้อจำกัดของ Photoshop 1.0
- หน้าจอ Photoshop ยุคแรกแสดงเครื่องมือที่สามารถใช้งานได้
- แปรงสามารถเลือกได้ไม่เพียงแค่สี แต่ยังเลือก ขนาดและพื้นผิว ได้ด้วย
- มีทั้งเครื่องมือเลือกพื้นที่ที่ละเอียดและฟิลเตอร์ภาพหลากหลายแบบ
- หนึ่งในความสามารถสำคัญที่ยังไม่มีคือการแบ่งภาพออกเป็นหลาย เลเยอร์ ซึ่งถูกเพิ่มเข้ามาในเวอร์ชัน 3 ปี 1994
- ในหน้าการตั้งค่า ผู้ใช้สามารถปรับแต่งบางความสามารถได้
- ตัวเลือกฟอนต์ ขนาดฟอนต์ และรูปแบบฟอนต์ยังมีจำกัด
- การใส่ข้อความต้องพิมพ์ลงในกล่องโต้ตอบก่อน แล้วจึงย้ายเข้าไปในภาพ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ตอนทำงานที่ Adobe ในช่วงทศวรรษ 2000 ผมเคยพยายาม เก็บรักษาซอร์สโค้ด ของ Photoshop, Illustrator, PostScript และแอปอื่น ๆ
ยังมีแบ็กอัปฟลอปปีดิสก์ Mac ต้นฉบับของ Thomas Knoll เหลืออยู่ จึงเอา Mac Plus มาใช้สาย serial กับ Kermit ย้ายไฟล์ลงแล็ปท็อป และเวอร์ชันแรกคือ 0.54 ลงวันที่ 6 กรกฎาคม 1988
ไฟล์ในฟลอปปีดิสก์เป็นอาร์ไคฟ์บีบอัดรูปแบบเก่า ๆ หลายแบบ แต่ส่วนใหญ่อ่านได้ และผมเก็บโค้ดทั้งหมดที่พบไว้ในเซิร์ฟเวอร์ Perforce พิเศษ
น่าเสียดายที่แบ็กอัป Illustrator รุ่นแรกสุดอยู่ในไดรฟ์ดิสก์ภายนอกตัวเดียวที่เสียไปแล้ว
ตอนนั้นมีฟีดแบ็กว่า การโต้ตอบของอินเทอร์เฟซ ยังไม่ค่อยดี และตอนนี้ก็ตัดสินได้ยาก แต่ FreeHand ได้รับความนิยมอย่างรวดเร็ว ก่อนจะหายไปในภายหลัง
มีบทความที่สรุปไว้ดีว่าต้องใช้อะไรบ้างเพื่อ build แอปจากซอร์สโค้ดนี้: 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จำได้ว่าเคยไป Adobe ช่วงกลางยุค 90 เพื่อ แลกเปลี่ยนซอร์สโค้ด กัน
PhotoShop ใช้ MacApp เป็นฐาน และ Adobe มีเลเยอร์ที่ทำงานบน Windows
เราแลกเอนจิน SQL ที่กำลังพัฒนาอยู่กัน และโค้ดที่เอากลับบ้านมามีบางส่วนของ PhotoShop อยู่แน่ ๆ แต่ไม่มากนัก ส่วนใหญ่เป็นโค้ดคำนวณ color space แปลก ๆ ที่ผมไม่ได้สนใจ
อยากลองดูซอร์สเพื่อดูว่ายังมีร่องรอยของ MacApp เหลืออยู่ไหม
หลังกลางยุค 90 ทุกอย่างอาจเปลี่ยนไปหมดแล้วก็ได้
ไม่ค่อยเคยได้ยินกรณีแบบนี้ อยากรู้ว่ามี เรื่องเล่าเรื่องการแลกเปลี่ยนโค้ด อื่น ๆ อีกไหม
แน่นอนว่าก็คงเป็นแบบนั้น แต่เป็น ซอฟต์แวร์ที่เทอะทะ พอสมควร
Think Class Library ช่วยชีวิตนักพัฒนาไว้หลายคน และ Greg Dow อาจยังทำงานที่ Adobe อยู่ก็ได้
พอมาคิดดูแล้ว PowerPlant ดีกว่า TCL เสียอีก: https://en.wikipedia.org/wiki/PowerPlant
น่าทึ่งที่ ประสบการณ์ผู้ใช้ โดยรวมยังแทบเหมือนเดิมจนถึงตอนนี้
วิสัยทัศน์ของวิศวกรยุคแรก ๆ นั้นยอดเยี่ยมมาก
แต่ทุกวันนี้ทุกครั้งที่เปิดแอปก็หงุดหงิด และช่วงเวลาเดียวที่รู้สึกว่ามันลื่นบนเดสก์ท็อปคือช่วงสั้น ๆ ตอน MacBook Pro M1 เพิ่งออก และมี Adobe Photoshop รุ่น beta สำหรับ Silicon
ยุคนั้นจบไปแล้ว และมันก็กลับมาช้าอีกครั้ง
ความเจ็บปวดนั้นของจริง และถ้าจะใช้งานให้ดีในตอนนั้น SGI Indigo ที่มี RAM 96MB ดีกว่า
ช่วงปลายยุค 90 ใช้กับ 9500 เหมาะที่สุด และตอนนั้นก็ยังต้องใช้ RAM ทั้ง 1GB
ผมยังใช้เวอร์ชัน crack ที่ออกแถวปี 2022 ซึ่งรองรับ M1 เป็นครั้งแรกอยู่ และมันยังลื่นเหมือนเมื่อ 2 ปีก่อน
ตอนนี้ Scott Belsky กลายเป็นนักลงทุนแล้ว และเขาเขียนถึงกระบวนการที่ขาย BeHance กับ Adobe ไปสู่เศรษฐกิจแบบเช่าใช้
แม้จะเรียกว่าเป็นหนังสือที่ดี แต่ก็ออกแนวหนังสือพัฒนาตัวเองสำหรับผู้บริหารที่มีจำนวนลดลงมากกว่า
ถึงอย่างนั้น ระบบนิเวศโอเพนซอร์สสำหรับงานศิลปะและภาพก็ดีขึ้นกว่าที่เคย แต่ในความเป็นจริงเป็นเพราะเครื่องมือระดับมืออาชีพที่ตามให้ทันไม่ได้หากไม่มีการสนับสนุนจากชุมชนมีราคาแพงเกินไป จนทุกคนถูกผลักออกไป
บทความปี 2013 พูดถึง Adobe Photoshop 1.x จากปี 1990 เนี่ยนะ
ได้ดูซอร์สโค้ดแล้ว แต่ก็อยากเข้าใจว่าอะไรทำให้โค้ดนั้นสวยงามและสง่างาม
ตอนเรียน Rust ผมก็เคยกังวลคล้าย ๆ กัน รู้สึกว่าแม้แต่เกม Snake ง่าย ๆ ก็มีตัวเลือกมากเกินไปตอนตัดสินใจวางโครงสร้างโค้ด จนกลายเป็นเรื่องยาก
ระหว่างคิดว่าจะสร้างฟังก์ชันและ UI ที่ทำงานบน “พื้นที่” อย่างไร ก็เลยนึกถึง Photoshop หรือ 3ds Max และดีใจมากที่เจอ repository นี้ แต่พูดง่าย ๆ คือยังไม่เข้าใจ
ในมุมของการเรียนรู้ มันน่าสนใจ และผมอยากพัฒนาทักษะด้าน design pattern ถ้ามีแหล่งข้อมูลดี ๆ สำหรับเรียนรู้ โครงสร้างโค้ด ก็ช่วยบอกหน่อย
เมื่อก่อนผมเคยทรมานมากกับ abstraction, design pattern และโครงสร้าง
แต่พอทำงานกับโค้ดเชิงคำสั่งแบบ “จริง ๆ” ลืมเรื่อง class ไปสักพัก และวางโค้ดทั้งหมดไว้ในไฟล์เดียว ผมก็พบว่าโค้ดจะค่อย ๆ เริ่มจัดโครงสร้างของมันเอง
ไม่ได้หมายความว่านี่เป็นทางเดียว แต่ผมรู้สึกว่า object-oriented อาจกลายเป็นอุปสรรค เพราะทำให้จมอยู่กับตัวเลือกมากเกินไป
โครงสร้างพื้นฐานของแอป MacApp คือ document และ framework MacApp จะ dispatch event ไปยัง handler
ผมไม่ได้ทำงานกับแอป MacApp มานานแล้ว แต่จำได้ว่าโครงสร้างพื้นฐานเป็นแบบนั้น
ดูเหมือนว่า MacApp เองจะไม่ได้รวมอยู่ด้วย แต่น่าจะมีอยู่ที่ไหนสักแห่ง และครั้งหนึ่ง Adobe เคย port MacApp ไป Windows เพื่อไม่ต้องเขียนทุกอย่างใหม่
คิดว่าหลังจากนั้น ณ จุดหนึ่งคงถูกแทนที่ด้วยชั้น abstraction ของตนเอง
John Knoll เคยเป็น หัวหน้าฝ่ายวิชวลเอฟเฟกต์ ของ Star Wars ภาคพรีเควล และต่อมาก็มีส่วนร่วมใน Rogue One
สารคดีเบื้องหลังการสร้างภาคพรีเควลยังดูได้ดีแม้ในตอนนี้: https://youtu.be/da8s9m4zEpo?si=5y5gHUMxztwVzMny
https://www.imdb.com/title/tt19896784/?ref_=nv_sr_srsg_0_tt_...
ท่านเป็นผู้เขียนตำราคลาสสิกด้านการตรวจจับรังสี
มีส่วนที่บอกว่า “คงไม่เคยจินตนาการว่าจะได้เพิ่มคำหนึ่งคำลงในพจนานุกรม” แต่ 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...
https://www.youtube.com/watch?v=rRi8LptvFZY
ในระยะยาวก็คงไม่ได้ผลอยู่ดี แต่ตอนนี้ผมตระหนักชัดเจนแล้วว่า Velcro เป็นชื่อเครื่องหมายการค้า
ผมจำได้ว่าเคยเห็น Photoshop ก่อนยุค Adobe ที่โรงพยาบาลใน Ann Arbor
ตอนนั้นคิดว่ามันยอดเยี่ยมจริง ๆ
ขอเสริมอย่างหนึ่งว่า MacApp เวอร์ชันที่ใช้ในตอนนั้นเป็น Apple Pascal app framework และแทบจะแน่นอนว่ายังเป็นเบต้า
Tom Knoll ใช้อัลกอริทึม B-spline จากโค้ดที่เขาเคยทำให้บริษัทของเราในฐานะ contractor เป็นพื้นฐานของ curve editor
บริษัทที่ เปิดเผยซอร์สโค้ด ของซอฟต์แวร์เวอร์ชันเก่าควรได้รับคำชื่นชม
หวังว่าในอนาคตจะมีบริษัททำแบบนี้มากขึ้น
แต่ก็น่ากังวลว่าซอร์สโค้ดจำนวนมากเหล่านี้อาจสูญหายไปตามกาลเวลาและผ่านกระบวนการควบรวมกิจการต่อเนื่องหลายครั้ง
การใช้ระบบควบคุมเวอร์ชันอย่างแพร่หลายก็เป็นปรากฏการณ์ที่ค่อนข้างใหม่ ดังนั้นแม้จะยังเหลืออยู่ ก็มีโอกาสสูงที่จะอยู่ในเทปแบ็กอัปแบบสุ่ม ฟลอปปีดิสก์ หรือเอกสารพิมพ์ในแฟ้ม
“เราเก็บรวบรวมและอนุรักษ์ซอฟต์แวร์ในรูปแบบซอร์สโค้ด เพราะซอฟต์แวร์บรรจุความรู้ทางเทคนิคและวิทยาศาสตร์ของเราไว้ และมนุษยชาติไม่อาจเสี่ยงที่จะสูญเสียมันไปได้
ซอฟต์แวร์เป็นส่วนอันล้ำค่าของมรดกทางวัฒนธรรม
เราดูแลซอฟต์แวร์ทั้งหมดที่เราเก็บรวบรวมและทำให้เข้าถึงได้
เพราะมีเพียงการแบ่งปันเท่านั้นที่จะรับประกันการอนุรักษ์ไว้ได้ในระยะเวลาที่ยาวนานมาก”
ก่อตั้งโดย Roberto Di Cosmo เพื่อนของผม
รวมถึงมีสัญญาทางกฎหมายมาตรฐานจริง ๆ ที่ลงโทษการรั่วไหลก่อนกำหนดด้วย
น่าจะเป็นบริการที่ทำอัตโนมัติได้ค่อนข้างมากและใช้แรงดูแลน้อย
บริษัทสามารถมิเรอร์ git repository ไปยังเซิร์ฟเวอร์ส่วนตัวที่องค์กรอนุรักษ์ดูแลอยู่ และองค์กรอนุรักษ์ก็สามารถสร้าง repository สาธารณะว่าง ๆ ที่สอดคล้องกันได้
หลังจากนั้น ทุกชั่วโมงเอเจนต์จะกวาดดู repository ส่วนตัว แล้วซิงก์เฉพาะคอมมิตที่มีเวลาคอมมิตเก่ากว่า 10 ปีไปยัง repository สาธารณะ
ซิงก์ ref ไปด้วย แต่เขียนใหม่เหมือนกับใช้
git filter-branchเพื่อลบคอมมิตทั้งหมดที่ใหม่กว่า 10 ปีออก และทิ้ง ref ที่ว่างเปล่าหลังการกรองก็พอ