Entrevista a Ryan "Icculus" Gordon

Tema en 'Los Nuevos' comenzado por MagFuckinNeto, 28/Abr/2011.

  1. MagFuckinNeto

    MagFuckinNeto Trickster God

    Ingreso:
    24/Ene/2011
    Mensajes:
    88
    Ubicación:
    Junín (BA - Argentina)
    No sabía donde mandarlo, así que lo mando acá, que los mods lo muevan a donde corresponda si este no es el lugar. :P

    Icculus es uno de los mayores responsables de portear juegos a Linux. Hizo ports nativos para (entre otros juegos) los Quake, Unreal (de hecho, el instalador que viene con UT2004 es de su autoría) y, hasta que se canceló, estuvo trabajando en portear Unreal Tournament III. Hace un mes y medio lo entrevistaron, acá está la traducción de la misma, la cual también incluye partes hablando del fallido port a UT3 y de su port para UT200X:
    --------------------------------------------------------------------------------------
    1) Primero que nada, ¿podés presentarte ante los lectores?

    Me llamo Ryan, y hago que los juegos corran en Linux. Cuando no estoy haciendo eso, paso mi tiempo escribiendo herramientas que facilitan el porteo de juegos a Linux. También corro un server, icculus.org, donde hosteo proyectos opensource para decenas de desarrolladores.

    Paso mucho tiempo pensando cómo hacer para que Linux sea un mejor sistema, y espero algún día llegar a hacer contribuciones pequeñas, pero significativas, que permitan alcanzar esa meta.

    2) ¿Cómo te metiste en Linux y el desarrollo para Linux? ¿Cual es tu historial?

    Hace mucho, en 1994, solía ser un usuario hardcore de OS/2 por algunos años. Siempre peleé contra el sistema dominante, creo, pero al mismo tiempo, Solía boquear mucho de cómo mi sistema era mejor que MS-DOS y Windows 3.1, lo cual era estúpido, ya que Windows 95 estaba a punto de arrollarlo todo. Lo sabía, y seguí luchando contra lo inevitable.

    Probablemente leí sobre OS/2 en alguna revista de por ahí y lo quise por las características técnicas, pero la razón por la cual estuve con ese sistema por mucho tiempo fue por un programa gratis que corría en OS/2, llamado EMX. Era un compilador gratuito de C y lo podías descargar a través de FTP, lo cual fue genial, porque Microsoft, IBM, Borland, todos querían cientos de dólares por un compilador C y yo era un adolescente sin dinero.

    EMX fue un programa por línea de comandos, y la forma en que lo lanzabas era escribiendo tres letras mágicas: gcc.

    Hay gente que llega al Software Libre por accidente. Yo adoraba este gran compilador y lo usaba todo el tiempo, pero no entendía nada sobre GPL. El código fuente de algunos programitas que escribí fue posteado en sitios FTP, pero no tenía ningún concepto sobre la libertad del software. Simplemente pensé que esto era lo que la gente debía hacer con esos programitas que no valía la pena vender. Realmente me gustó la idea de que alguien pueda aprender algo con ellos.

    Todavía me gusta.

    Comencé a jugar con Linux en este tiempo, también, probablemente porque estaba cansado de rebootear OS/2 (se congelaba todo el tiempo, debido a una falla de diseño que lo hacía --sinceramente-- inferior a Windows 3.1). Estaba toqueteando Slackware, y caí enamorado tan pronto como vi que podías armar tu propio kernel personalizado. (cómicamente, me da miedo hacer eso ahora) Estaba contento con que GCC sea el estándar ahí. Luego, me voló la cabeza el escritorio de Enlightenment. Se sentía como El Futuro, donde usaríamos estas gloriosas máquinas y manejaríamos en autos voladores.

    Me apegué a OS/2 por un tiempo, pero sabía que estaba condenado; Windows 95 lo mató en el hogar, y NT lo mató en la oficina. Un día se cmió mi MBR sin razón, y eso fue todo. Pasé de largo Windows íntegramente, instalando Red Hat encima de los restos de mi partición OS/2.

    Fuera del colegio, fui contratado para desarrollar en Linux y Mac, porque nadie más lo haría. Loki, una compañía que vendía juegos para Linux, hizo un concurso donde podías jugar con el código fuente de sus productos por 48 horas, así que viajé a Atlanta para participar, y terminé trabajando para ellos luego de eso.

    Blah blah blah, una cosa llevó a la otra, y aquí estoy hoy. Creo que estoy más interesado en hablar de OS/2 que en mí mismo. :)

    3) ¿Cual fue tu primera computadora?

    ¡Una Commodore 64! Probablemente la haya usado durante toda mi niñez, frecuentemente la favorecía, aún cuando había máquinas con MS-DOS en mi casa.

    Pasé gran parte de mi tiempo en la C-64 jugando videojuegos. No sabía qué era lo que más me atraía, pero mi padre fue un prolífico pirata del software en su momento, así que tuvimos docenas de cajas llenas de copias de discos. Esto tenía lugar en una época en la que cada juego se sentía único y brillante, y todo era posible.

    La tecnología avanzó, pero no sé si me siga sintiendo así con respecto al gaming. Aún tras la mudanza a los sistemas "reales" de videojuegos, como la Nintendo de 8-bits, se sintió como retroceder un escalón, de muchas formas.

    4) ¿Qué distro(s) de Linux usás?

    Ubuntu, exclusivamente. Pasé por muchas distros en todos estos años, y me perdí el bote de Debian completamente, pero cuando me topé con apt-get, sabía que iba a ser más feliz de lo que era. Ubuntu parecía ser la distro más enfocada en construir un sistema para usuarios finales. No sé si lo consiguieron bien, pero hoy por hoy, se siente como si tuviera el mayor potencial... y popularidad, lo cual es tan importante como el potencial en este caso.

    5) Desde el punto de vista del desarrollo, ¿qué API creés que es la mejor? ¿OpenGL o Direct3D? ¿y por qué?

    Me gusta más el "feel" de OpenGL, lo cual es algo que no puedo explicar a quienes no son programadores, pero no creo que importe a esta altura cual API uno elija. Más o menos, tenés paridad de características entre ambas APIs, ambas cometieron un puñado de errores de diseño, y ambas hacen algunas cosas de una manera más placentera que la otra.

    Por supuesto, lo realmente imperdonable sobre Direct3D es que sólo funciona en Windows. Si realmente fuera multiplataforma, ni siquiera le encontraría un "pero" a su uso. Pero, ya que escribís OpenGL en casi todos lados, y Direct3D en casi ningún lado, me parece que es una falsa decisión. Si estuviera escribiendo software para Windows, definitivamente usaría Direct3D, y si estuviera escribiendo por fuera de este, definitivamente usaría OpenGL.

    Sé que es divertido pelear por cosas como la mejor API, o la mejor distro o editor de texto, pero esos argumentos son distracciones; en lugar de eso, enfóquense en construir cosas hermosas con las herramientas que tienen, y si fallan en eso, enfóquense en construir mejores herramientas para hacer cosas hermosas.

    6) ¿Qué pensás sobre la calidad de los controladores gráficos open source? ¿Qué hardware para gráficos utilizás?

    Creo que todavía no están listos, y creo que estamos en una posición peligrosa donde las distros los tratan como si lo estuvieran.

    Uso los controladores closed-source (código cerrado) de Nvidia en una GeForce 9800GTX. Mi próxima GPU será una tarjeta GeForce más poderosa con controladores closed-source. Las cosas en las que trabajo requieren de esto.

    También encuentro completamente ridículo que estemos distribuyendo controladores OpenGL open-source sin soporte para S3TC por temas de patente. ¡Hoy en día, es como entregar un navegador web sin soporte para .jpg!

    Me siento realmente pragmático con respecto a esto; que los controladores de video open source sean distribuidos simplemente por actitudes dogmáticas con respecto a la libertad de software es algo costoso para Linux como ecosistema. Creo que la única forma en que podamos encontrar una forma razonable de tener controladores open source es si Nvidia (etcétera) comienzan a desarrollar controladores open source desde el inicio, como miembros de primera clase de la comunidad.

    No me convence esta actitud de que el desarrollo de controladores GPU es tan difícil que simples mortales no pueden hacerlo, y que por eso no hay valor en que sean abiertos. Pero creo que no hay forma de que los controladores open source puedan comenzar desde cero con cada generación de hardware que llega a las tiendas. La solución más limpia es la de abrir el código fuente de los controladores que sabemos que funcionan, y que todos (los vendedores de hardware, las distros, los individuos) trabajen en la misma rama fuente. Todos ganarían.

    Todavía sigo soñando con un mundo mejor. :)

    7) Hace unos años atrás, el mercado de juegos de Linux parecía florecer, había muchos juegos siendo porteados, con otros títulos teniendo soporte para Linux entre sus planes. Sin embargo, en los últimos años, no ha habido grandes títulos para Linux con binario nativo. ¿Que creés que ha pasado?

    Viene en oleadas. Estamos en la cresta de la ola donde todos piensan que las consolas para videojuegos son super-asombrosas.

    Nintendo tiene una consola de muy bajo poder, y Microsoft y Sony parecen pensar que Kinect y Move son artilugios aceptables para extender la generación actual de consolas en lugar de introducir una nueva. Creo que no consideran que las agendas de desarrollo se hacen más y maás largas, así que la vida útil de una consola necesita incrementarse para acomodarse.

    ¡La Xbox 360 y la PS3 tienen más de 5 años, y la Wii está compuesta en su mayoría por hardware de Gamecube! Tarde o temprano, los desarrolladores se darán cuenta de que no tienen más la tecnología para hacer lo que se les plazca, y volverán a la PC. Pasa cada par de años.

    Y es ahí donde van a ver títulos de gran nombre en Linux de nuevo. Y de la misma forma verán más títulos para Mac, y para Windows.

    8) También parece ser que sos el desarrollador número uno en cuanto al porteo de videojuegos, pero no escuchamos nada de vos últimamente. ¿Es esta la razón o el resultado de la situación? :-)

    Pasé gran parte del año pasado trabajando en un proyecto que no tiene nada que ver con videojuegos, el cual me llevó mucho tiempo de mi vida, pero también hice trabajo para los primeros dos títulos de Humble Indie Bundles.

    Si soy el único que apoya el gaming en Linux, tenemos un problema muy serio. Estoy feliz por las contribuciones que hice, pero estaría aún más contento de saber que el gaming en Linux puede continuar si el día de mañana me arrolla un autobús. Hay otros por ahí haciendo lo que hago yo. Deberías entrevistarlos a ellos también. :)

    9) ¿Qué es lo que ves como el gran obstáculo que previene al gaming en Linux de tener una atracción mayor?

    Percepción. Desinformación. Y, a veces, la misma comunidad es su peor enemiga.

    El marketing ideal resolvería mucho de esto. Desafortunadamente, no hay una buena forma, hasta donde sé, de llevar a cabo esto. Apple puede hablar por Mac OS X y Microsoft puede vender a Windows de la forma que le parezca. ¿Quién está a cargo del mensaje de Linux?

    10) ¿Cada cuanto se te acerca un estudio de videojuegos para hacer un port?

    Se me acercan frecuentemente, pero muchas veces es por temas de servidores dedicados, o algún componente u otro y no para clientes completos corriendo nativamente en Linux.

    Solía buscar trabajo, ahora me vienen a buscar. Pero soy muy mercenario. Muchas veces, se me pregunta sobre trabajar en cosas que no son videojuegos.

    11) ¿Estás trabajando en algo ahora? ¿Es algo grande?

    Siempre estoy trabajando en algo. :)

    UT3 me enseñó a nunca, nunca hablar de algo hasta que sepas que va a salir publicado. Algunas de las cosas en las que estoy trabajando son interesantes, otras son muy mundanas. Sin embargo, tendrán que esperar a ver qué depara el futuro.

    En cuanto al open source: estoy muy enfocado en MojoShader. Nunca antes escribí un compilador, así que escribir uno para este proyecto me enseñó mucho, incluyendo cómo rendirse a la búsqueda del código limpio y elegante. El desarrollo de compiladores te enseña a alcanzar la belleza, pero también a aceptar la imperfección. Es una experiencia humilde; se la recimiendo a todos.

    Espero tener una revisión mayor de PhysicsFS en algún punto, pasando más tiempo mejorando MojoSetup, y apoyando a SDL 1.3 para que obtenga un release completo 2.0.

    12) No sé si te permite hablar de esto, pero, ¿por qué UT3 para Linux nunca pudo ver la luz del día?

    Sin comentarios. Lo lamento, no hablo sobre el UT3.

    13) Para que la gente aprecie que tan buen programador sos, ¿cuanto te llevó portear UT2004 a Linux?

    UT2004 me llevó algunas semanas, pero gran parte del trabajo fue hecho para UT2003, el cual fue un trabajo aún mayor. Para UT2003, me encontraba durmiendo bajo los escritorios de las oficinas de Epic, trabajando por días enteros durante un tiempo, viviendo de comida calentada en microondas, hackeando toda la noche y luego respirando el aire de la mañana desde el balcón mientras el sol salía.

    Fue parte de mi mejor trabajo. Viví en esa base de código; se convirtió en parte de mi, y yo en parte de ella.

    Hay un enorme costo de personal en esta especie de desarrollo, el cual no puedo ni siquiera empezar a valorar acá. Todos deberían trabajar en un proyecto así en algún punto de sus vidas, donde no tienen nada que perder más allá de su propio ser. Y luego de eso, nunca más.

    Así que para contestar a tu pregunta: UT200x tomó un par de meses. Y unas cuantas décadas.

    14) ¿Cual es el mayor problema de portabilidad que observás y arreglás? (Por ejemplo: barras invertidas)

    Esa que nombraste es una de las mayores. También se espera que el sistema de archivos no sea sensible a mayúsculas-minúsculas, o que se vea bien escribir en el directorio del juego en lugar de alguna parte en $HOME. (Si bien eso mejoró recientemente, ya que aún Microsoft se está quejando de esto también)

    No son difíciles de arreglar, pero surgen en casi cualquier proyecto.

    El siguiente gran problema es tener que reescribir el código de audio/video, o darte cuenta de cómo tratar con cierto middleware que no está disponible.

    Los constructores estáticos de C++ terminan siendo sorpresivamente dolorosos.

    Ocasionalmente también te cruzás con algo desopilante, como un juego que quiere manipular el administrador de memoria de Windows o algo así.

    He visto cada cosa desagradable, asquerosa en el libro, pero muchos de los problemas menores aparecen en cada proyecto.

    15) También, ¿cual es tu procedimiento de porteo? ¿Cómo empezás a trabajar en el código y probándolo, si tenés a gcc tirando decenas de errores?

    Naturalmente, el primer paso es resolver todos estos errores. :)

    Mientras el código sale de gcc, cae en dos categorías: lo arreglás, o lo dejás ser.

    Si es un pequeño problema de sintaxis en C++ en Visual Studio en el cual el código se apoya, o si quiere incluir windows.h o lo que sea, lo arreglo rápidamente y sigo con el siguiente problema. Si hay algo más complicado (el programa quiere llamar a una API de Win32 con varios tipos de datos que no tenemos) lo comento y mando una macro llamada STUBBED ahí. Todo lo que esta macro hace es escribir a stderr cuando llego a este código. Van a estar sorprendidos, algunas veces ese código no se usa nunca, así que no hay necesidad de portearlo.

    Una vez que tenés todo compilado y corriendo, tenés una gran cantidad de errores en stderr, y posiblemente un crasheo tras eso. Luego vas revisando eso de a uno por vez.

    Algunos son simples (¿el registro de debug que quiere saber cuanta RAM hay en la máquina? ¿a quién le importa?), algunos pueden ser trabajos masivos (reescribir el render completo), pero, en algún nivel más simple, la cantidad de trabajo comienza a limpiar cada uno de estos stubs hasta que el juego corre.

    16) ¿Encontrás más fácil escribir código multiplataforma?

    Si. Es más fácil eso que portear el código, ciertamente.

    Me doy cuenta que si tenés como objetivo Windows, Linux, y Mac OS X desde el principio, tu código va a andar en cualquier otro lugar que quieras intentar más adelante.

    Hasta no hace mucho, la gente diría, "¿para qué preocuparse? ¡Todos utilizan Windows!"

    Sin embargo, después las consolas se volvieron importantes.

    Y las pequeñas tiendas comenzaron a decir, "¡bueno, ni siquiera me interesan esas, de todos modos!"

    Pero ahora desearían tener también un port para iPad.

    ¡Nunca vas a saber qué es lo importante el día de mañana!

    Escribir código multiplataforma desde el inicio requiere más disciplina, pero vale la pena. También requiere un poco de conocimiento aprendido a duras penas, lo que significa que lo tenés que hacer mal mil veces antes de que sepas cómo hacerlo bien.

    17) ¿Cual es tu juego favorito de Linux? ¿Cuanto tiempo pasás jugando juegos (incluyendo consolas)?

    Mi juego favorito de Linux por ahora es Braid, sin dudas. Me gustaba desde antes de empezar a involucrarme con él. Me ofrecí para hacer la versión de Mac/steam gratis, aunque sea para tener una oportunidad de meterme en el cerebro de Jonathan Blow por un momento.

    ¿Cuanto tiempo paso jugando videojuegos? Se da en ciclos. Me obsesiono con un videojuego en cualquier plataforma, y exploro cada rincón de él por varias semanas. Esto probablemente sea daño cerebral causado por Metroid en mi niñez.

    Y luego no juego a nada por mucho tiempo. Es realmente fácil para mi distraerme y perder la productividad por un tiempo muy largo. hay una gran pila de juegos esperando para que comience, pero hago lo mejor para resistirme. Hay mucho trabajo importante por hacer y terminar.

    (Por lo que vale: pasé mi juventud entera jugando videojuegos. Todo el tiempo. Constantemente. Miles de ellos por miles de horas. Y no estoy arrepentido de nada.)

    18) ¿Qué pensás de Wine? ¿Es la forma de seguir adelante, o sólo un último recurso?

    El último recurso. Creo que será, como mínimo, increíblemente útil para arqueología, como DosBox lo ha sido para jugar a Wing Commander. Ciertamente, también es conocido por tener soporte para títulos modernos, también.

    Pero tenerlo como forma de cómo jugar juegos en Linux es completamente inaceptable por varias razones, tanto técnicas como morales.

    19) ¡Gracias por tu tiempo!
     
    #1

Compartinos

Cargando...