4 puntos por GN⁺ 2024-05-16 | 1 comentarios | Compartir por WhatsApp
  • Photoshop, que se convirtió en la herramienta emblemática de edición de imágenes digitales, comenzó como un programa personal en 1987 y, tras su distribución por Adobe, se consolidó como producto comercial en 1990
  • El Computer History Museum publicó el código fuente de Photoshop 1.0.1 para usos no comerciales con autorización de Adobe Systems Inc.
  • El código publicado consta de 179 archivos y unas 128,000 líneas, en su mayoría Pascal y ensamblador 68000
  • La biblioteca de aplicaciones MacApp, licenciada por Apple, queda excluida de la publicación, y también hay restricciones para la redistribución y el uso comercial
  • Grady Booch evaluó que en el código inicial se puede ver un diseño bien estructurado y la estructura básica que continúa en el Photoshop moderno

Los inicios de Photoshop y su comercialización

  • Thomas Knoll era estudiante de doctorado que investigaba visión por computadora en la University of Michigan, y en 1987 escribió un programa para mostrar y modificar imágenes digitales
  • John Knoll, que trabajaba en Industrial Light & Magic, vio que este programa era útil para la edición fotográfica, pero no había intención de convertirlo en producto desde el principio
  • Su primer nombre fue Display y, a medida que sus funciones se volvieron más sofisticadas, en el verano de 1988 consideraron que podía convertirse en un producto comercial
  • Los dos hermanos cambiaron el nombre a Photoshop, y el fabricante de escáneres de diapositivas Barneyscan incluyó unas 200 copias de la versión 0.87 como paquete bajo el nombre Barneyscan XP

Adobe y el lanzamiento de Photoshop 1.0

  • Adobe, por recomendación del director de arte Russell Brown, decidió comprar una licencia para distribuir una versión mejorada de Photoshop
  • El contrato se completó en abril de 1989, y Photoshop 1.0 comenzó a despacharse a inicios de 1990
  • Durante la década siguiente, Photoshop vendió más de 3 millones de copias
  • “Photoshop” se difundió tanto que en el diccionario en línea Merriam-Webster se usa como verbo para modificar una imagen digital con Photoshop u otro software de edición de imágenes

Código fuente publicado de Photoshop 1.0.1

  • El Computer History Museum, con autorización de Adobe Systems Inc., publicó el código fuente de Photoshop 1.0.1 de 1990 para usos no comerciales
  • Se incluyó la mayor parte del código, pero se excluyó la biblioteca de aplicaciones MacApp licenciada por Apple
  • La carpeta comprimida contiene 179 archivos y está compuesta por unas 128,000 líneas de código
    • Aproximadamente 75% es Pascal
    • Aproximadamente 15% es ensamblador Motorola 68000
    • El resto son varios tipos de datos
  • El Photoshop inicial fue escrito principalmente en Pascal para Apple Macintosh, y en las partes donde era importante la eficiencia de ejecución se usó código máquina para Motorola 68000
  • Thomas Knoll contó que en la versión 1 él era el único ingeniero, y que en la versión 2 había dos ingenieros
  • Thomas se encargó del programa principal de la aplicación, y John escribió varios plugins de procesamiento de imágenes

Descarga y condiciones de licencia

La estructura del código vista por Grady Booch

  • Grady Booch comparó la experiencia de abrir el código fuente de Photoshop 1.0 con Howard Carter abriendo por primera vez la tumba de Tutankamón
  • El código fue evaluado como un sistema muy bien estructurado, con una separación consistente de interfaces y abstracciones
  • Para cada combinación de interfaz e implementación suele haber un tipo principal, y es fácil seguir las decisiones de diseño que componentizan las abstracciones
  • Gracias a nombres consistentes, métodos adecuadamente divididos e implementaciones simples, la estructura del sistema es relativamente fácil de entender
  • En Photoshop 1.0 se aprecia una estructura básica que permanece, en forma más desarrollada, incluso en la implementación moderna
    • Tiles y filtros se mencionan como estructuras representativas
    • Incluye una abstracción de memoria virtual para manejar imágenes mucho más grandes que el búfer de pantalla o la memoria principal
  • Photoshop 1.0 tenía poco más de 100,000 líneas, pero las versiones modernas tienen más de 10 millones de líneas
  • Tanto entonces como ahora, gran parte del código está relacionado con entrada/salida y los diversos formatos de archivo que Photoshop debe procesar
  • En el código fuente de la versión 1.0 casi no hay comentarios, y la mayoría están asociados a fragmentos en ensamblador
  • Booch consideró que la falta de comentarios no era un problema porque el código era fácil de leer, y que los comentarios incluso podrían haber estorbado
  • En el código también quedan huellas de la época
    • Código para procesar el software del escáner Thunderscan de Andy Herzfield
    • Soporte para el formato temprano de archivos gráficos ráster TARGA
    • Algunas referencias a Barneyscan

Funciones y limitaciones de Photoshop 1.0

  • La pantalla inicial de Photoshop mostraba las herramientas disponibles
  • Los pinceles permitían elegir no solo el color, sino también el tamaño y la textura
  • Ofrecía herramientas de selección sofisticadas y diversos filtros de imagen
  • Una de las funciones importantes que faltaban era dividir la imagen en varias capas, función que se agregó en la versión 3 de 1994
  • En la página de preferencias era posible personalizar algunas funciones
  • Las opciones de fuente, tamaño de fuente y estilo de fuente eran limitadas
  • El texto se ingresaba en un cuadro de diálogo y luego se trasladaba dentro de la imagen

1 comentarios

 
GN⁺ 2024-05-16
Comentarios de Hacker News
  • Trabajé en Adobe en los 2000 e intenté preservar el código fuente de Photoshop, Illustrator, PostScript y otras apps.
    Quedaba una copia de respaldo original en disquete para Mac de Thomas Knoll, así que conseguí una Mac Plus y pasé los archivos a una laptop con un cable serial y Kermit; la primera versión era la 0.54 con fecha del 6 de julio de 1988.
    Los archivos del disquete estaban en varios formatos antiguos de archivo comprimido, pero la mayoría se podían leer, y guardé todo el código que encontré en un servidor Perforce especial.
    Lamentablemente, el respaldo más antiguo de Illustrator estaba en una sola unidad de disco externa averiada.

    • La persona a cargo de Illustrator estaba en Palo Alto y era fácil acceder a ella.
      En ese momento había comentarios de que la interacción de la interfaz no era muy buena; hoy es difícil juzgarlo, pero FreeHand ganó popularidad rápidamente y luego desapareció.
  • Hay un artículo que explica muy bien qué se necesita para compilar la app con este código fuente: http://basalgangster.macgui.com/RetroMacComputing/The_Long_V...

    • Me sorprendí al leer más artículos de este sitio.
      No hay mucha gente con este tipo de conocimiento.
    • Me pregunto si hay algún problema al agregarlo a un lector de feeds.
      El RSS me funciona bien, pero en Miniflux aparece 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
  • Recuerdo haber ido a Adobe a hacer un intercambio de código fuente a mediados de los 90.
    PhotoShop estaba basado en MacApp, y Adobe tenía una capa que funcionaba en Windows.
    Nosotros intercambiamos un motor SQL en desarrollo, y el código que me llevé a casa definitivamente incluía algunas partes de PhotoShop, aunque no muchas; más que nada código peculiar para cálculos de espacios de color que ignoré.
    Me gustaría revisar el código fuente para ver si aún quedan rastros de MacApp.
    Puede que todo haya cambiado desde mediados de los 90.

    • La idea de intercambiar código suena genial.
      No he oído muchos casos así; me pregunto si hay otras historias de intercambio de código.
    • De hecho está indicado explícitamente como excepción: “All the code is here with the exception of the MacApp applications library that was licensed from Apple”
    • Trabajé varios años en Photoshop, y ese código sigue ahí.
    • ¿MacApp en Windows?
      Claro, así era, pero era un software bastante inflado.
      Think Class Library salvó a muchos desarrolladores, y quizá Greg Dow todavía siga trabajando en Adobe.
      Ahora que lo pienso, PowerPlant era mejor que TCL: https://en.wikipedia.org/wiki/PowerPlant
  • Sorprende que la experiencia de usuario siga siendo en gran parte la misma hoy.
    La visión de los primeros ingenieros fue impresionante.
    Pero hoy en día me molesta cada vez que abro la app, y el único período en que se sintió ágil en escritorio fue aquel breve momento cuando salió por primera vez la MacBook Pro M1 y existía la beta Silicon de Adobe Photoshop.
    Esa época terminó y volvió a ponerse lenta.

    • No sé si la usaste a principios de los 90, pero en una Mac con 4 MB de RAM deshacer Gaussian Blur tardaba entre 5 y 10 minutos.
      El sufrimiento era real, y para usarlo bien en esa época era mejor una SGI Indigo con 96 MB de RAM.
      A fines de los 90 corría mejor en una 9500, y aun así necesitaba 1 GB entero de RAM.
    • Me pregunto si es porque la experiencia de usuario es buena, o si cambiarla es imposible porque los usuarios se rebelarían en masa.
    • Solo haz downgrade.
      Todavía uso una versión crackeada de alrededor de 2022, la primera con soporte para M1, y sigue sintiéndose igual de rápida que hace dos años.
    • The Messy Middle es un excelente relato sobre cómo el ex CEO de BeHance rehizo los productos en la nube de Adobe y cómo pensaba hacerlo.
      Scott Belsky ahora es inversionista, y escribió sobre el proceso de vender BeHance y Adobe hacia la economía de renta.
      Aunque dicen que es un gran libro, también se parece a un libro de autoayuda para ejecutivos en decadencia.
      Aun así, el ecosistema open source para trabajo artístico y de imágenes está mejor que nunca; en la práctica, eso también se debe a que las herramientas profesionales se volvieron tan caras que dejaron fuera a todo el mundo que no pueda seguirles el paso sin apoyo comunitario.
    • Todavía uso una vieja licencia de CS6, y aunque dentro de la app se siente ágil, al arrancar todavía tarda.
  • Un artículo de 2013 sobre Adobe Photoshop 1.x de 1990.

    • Siento que como la mitad de ese código todavía debe estar corriendo como WASM en photoshop.adobe.com.
  • Vi el código, pero ojalá pudiera entender qué es lo que lo hace hermoso y elegante.
    Aprendiendo Rust, tuve una inquietud parecida: incluso para un simple juego de Snake, sentía que había demasiadas opciones al momento de decidir la estructura del código, y eso lo hacía complicado.
    Pensando en cómo construir funciones y una UI que operen sobre un “espacio”, me acordé de Photoshop y de 3ds Max; encontrar este repositorio fue genial, pero simplemente no logro entenderlo.
    Me parece interesante desde la perspectiva del aprendizaje y me gustaría mejorar mis habilidades con patrones de diseño, así que agradecería buenas referencias para aprender sobre estructura de código.

    • No puedo hablar mucho sobre este código ni sobre mis antecedentes personales, pero sinceramente creo que conviene dar un paso atrás y mirar los principios.
      Antes sufría mucho por las abstracciones, los patrones de diseño y la estructura.
      Pero luego me di cuenta de que, al trabajar con código imperativo “de verdad”, olvidarme un rato de las clases y poner todo el código en el mismo archivo, el código empieza a encontrar su propia estructura.
      No significa que ese sea el único camino, pero siento que la orientación a objetos puede estorbar porque te deja sepultado entre demasiadas opciones.
    • Este código usaba MacApp, que fue uno de los primeros frameworks que intentaban encargarse del código repetitivo.
      La estructura básica de una app de MacApp es el documento, y el framework MacApp despacha los eventos a los handlers.
      Hace mucho que no trabajo con apps de MacApp, pero si mal no recuerdo, esa era su estructura básica.
      Parece que MacApp en sí no está incluido, aunque podría estar en alguna parte, y Adobe en algún momento porteó MacApp a Windows para no tener que reescribirlo todo.
      Más adelante, en algún punto, supongo que lo reemplazaron por su propia capa de abstracción.
  • John Knoll fue el responsable de efectos visuales de las precuelas de Star Wars, y después participó en Rogue One.
    Los documentales sobre cómo se hicieron las precuelas siguen estando bastante bien hoy en día: https://youtu.be/da8s9m4zEpo?si=5y5gHUMxztwVzMny

  • Hay una parte que dice “probablemente nunca imaginaron que añadirían una palabra al diccionario”, pero Adobe intenta evitarlo porque eso llevaría a la genericización de la marca.
    Sus lineamientos de marca incluyen ejemplos como: “siempre escriba la marca con mayúscula inicial y úsela en su forma correcta. Ejemplo correcto: The image was enhanced with Adobe® Photoshop® Elements software. Ejemplo incorrecto: The image was photoshopped.”
    [1]: https://en.wikipedia.org/wiki/Generic_trademark
    [2]: https://www.adobe.com/legal/permissions/trademarks.html

    • A estas alturas, parece bastante claro que ya entró en territorio de genericización.
      Según recuerdo, Xerox también perdió una demanda importante por algo relacionado con esto.
      [1] Por ejemplo: https://www.consumerreports.org/consumerist/15-product-trade...
    • Entiendo esa presión, pero nadie va a hablar así.
    • Le hice photoshop a una imagen con Gimp.
    • Velcro también ha intentado hacer lo mismo, y de una forma mucho más efectiva.
      https://www.youtube.com/watch?v=rRi8LptvFZY
      A largo plazo igual no va a funcionar, pero ahora sí tengo muy presente que Velcro es una marca registrada.
    • Me pregunto si la genericización realmente es un problema.
  • Recuerdo haber visto Photoshop antes de que lo comprara Adobe en un hospital de Ann Arbor.
    Me pareció realmente impresionante.
    Como dato adicional, la versión de MacApp que usaban en ese entonces era un framework de aplicaciones en Apple Pascal, y casi con seguridad era beta.
    Tom Knoll usó código de un algoritmo de B-spline en el que había trabajado como contratista para nuestra empresa como base del editor de curvas.

    • Me pregunto qué hacían con eso en un hospital.
  • Hay que reconocer a las empresas que publican el código fuente de versiones antiguas de su software.
    Ojalá más empresas hicieran lo mismo en el futuro.
    Eso sí, me preocupa que una buena parte de este tipo de código fuente se haya perdido con el tiempo y tras varias adquisiciones encadenadas.
    El uso generalizado del control de versiones también es algo relativamente reciente, así que, incluso si todavía existe, es muy probable que esté en copias de seguridad hechas al azar en cinta, disquetes o impresiones guardadas en carpetas.

    • https://www.softwareheritage.org/
      “Recolectamos y preservamos software en forma de código fuente porque el software contiene nuestro conocimiento técnico y científico, y la humanidad no puede darse el lujo de arriesgarse a perderlo.
      El software es una parte valiosa del patrimonio cultural.
      Cuidamos y hacemos accesible todo el software que recopilamos.
      Porque solo compartiéndolo se puede garantizar su preservación a muy largo plazo”.
      Lo fundó mi amigo Roberto Di Cosmo.
    • Si una organización como Internet Archive ofreciera un servicio de escrow de divulgación diferida de código fuente de software, creo que muchas empresas lo usarían.
      Incluso incluyendo contratos legales estándar reales que castiguen las filtraciones anticipadas.
      Podría ser un servicio bastante automatizado y de bajo mantenimiento.
      La empresa podría espejar su repositorio de git en un servidor privado administrado por la organización de preservación, y la organización de preservación podría crear un repositorio público vacío correspondiente.
      Después, cada hora, un agente podría revisar el repositorio privado y sincronizar al repositorio público solo los commits cuya fecha tenga más de 10 años.
      También se podrían sincronizar las referencias, reescribiéndolas como si se hubiera usado git filter-branch para eliminar todos los commits de menos de 10 años, y descartando las referencias que queden vacías después del filtrado.