Tuesday, March 08, 2011

La batalla de los clones



Hace un par de semanas el Maestro Internacional de Ajedrez, David Levy, escribió un interesante artículo sobre lo que está pasando en el mundo de los programas que juegan al juego ciencia. Cabe destacar que Levy se hizo famoso al iniciar una apuesta en donde él decía la ciencia no podría crear una computadora que le ganara en un encuentro formal en el transcurso de los siguientes diez años. La apuesta fue conocida por otros científicos y ajedrecistas y se incrementó la cantidad apostada. El final de la historia es que en su momento, Levy ganó la apuesta que, hasta donde sé, nunca pudo cobrarla.

Pero lo interesante en todo esto es que el escocés Levy ha estado durante toda su vida involucrado con el mundo de las computadoras y programas que juegan al ajedrez. Ahora ha salido con un artículo que se denomina "La Clonación de los Motores de Ajedrez", fenómeno que ha empezado a aumentar con preocupación por dos razones. La primera es que los programas de ajedrez pueden ser un buen ingreso si juegan bien. Los aficionados y profesionales ahora buscan este tipo de software porque le permiten analizar las partidas con mucha más precisión, y segundo, porque muchos programas que juegan con gran fuerza, han sido puestos a disposición de la comunidad de cómputo, con todo y código fuente disponible, es decir, que el o los autores de algunos motores que juegan muy bien al ajedrez, han donado su trabajo a la comunidad y cualquiera puede entonces estudiar cómo es que estos programitas llegan a jugar tan bien.

Hay una Asociación Internacional de Juegos por Computadora (ICGA, por sus siglas en inglés), quien sanciona los torneos que se hacen entre ordenadores. Cada año el mejor programa, en una fiera competencia entre procesadores de computadora, se convierte en el campeón mundial de ajedrez cibernético. Este título es conveniente en términos comerciales pues el ganador tiene un argumento de venta espectacular: ¡compre su programa de ajedrez, campeón mundial entre máquinas!... Por ello mismo, el clonar programas de otros o hacerse del código de terceros para incorporarlo en el de un "nuevo" programa puede a veces caer en el plagio más elemental.

Por ejemplo, en 1996, un programador alemán, Herr Langer, inscribió a su programa Quickstep, que tuvo un sensacional inicio en la competencia entre computadoras. Sin embargo, Richard Lang, entonces programador de las computadoras de ajedrez Mephisto, reveló que la interfaz de Quickstep era idéntica a su propio programa. El asunto fue investigado y se interrogó a Langer, quien rechazó todas las acusaciones. Sin embargo, fue el propio Richard Lang quien mostró un error en su codigo, el cual se reproducía exactamente en el programa Quickstep. Entonces Langer confesó y fue expulsado del torneo. A todo esto, el alemán estaba de luna de miel y su esposa vio cómo lo desenmascaraban y descalificaban. Triste historia.

Otro caso más reciente fue el del programa SquarknII, del Maestro FIDE Jonadry González Espín, de la Habana, Cuba, que participó en el Campeonato Mundial de Ordenadores del 2010 en Kanazawa, Japón. Después de hacer muchos esfuerzos por parte de la organización para que González pudiese acudir a esta justa, por problemas de visado, que se resolvieron finalmente, se halló que su software era un clon del programa Robbolito 0.75g3, con solamente tres valores cambiados en todo el código. Espín fue descalificado y castigado con su no inclusión en ningún evento de la ICGA de por vida.

Pero el peor problema es el caso de Rybka, que se alega, es una copia de un programa de código abierto llamado Fruit. Rybka, programado por el Maestro Internacional Vasik Rajlich, ha ganado el campeonato mundial de máquinas en 2007, 2008, 2009 y 2010. Por tres años han habido rumores en el mundo del ajedrez computarizado que Rybka está basado en el código de Fruit, programado por Fabien Letouzey, quien quedó segundo en el campeonato mundial del 2005, en Reykjavik.

Para poder considerar si Fruit ha influenciado en gran medida el código de Rybka, podemos empezar por examinar la historia de ambos programas. En los resultados de estos campeonatos mundiales de programas de ajedrez, en febrero del 2004, Rybka quedó en el lugar 53 de 54 posibles. En su aparición en el 2004, Fruit tenía funciones básicas de evaluación y búsqueda, pero en cada nueva versión hizo mejoras de unos 100 puntos de rating, por lo que en la versión 2.1, aún de código abierto, ya era un programa muy fuerte. La última versión de Fruit ya no es abierta presumiblemente porque su autor no quiere que se generen clones con su código.

De acuerdo a Wikipedia, Vasik Rajlich empezó a trabajar en Rybka a principios del 203. La primera versión beta de Rybka hizo su debut en diciembre del 2005. En ese entonces el programa hizo en el torneo Paderborn de Computadoras de ajedrez, 5.5 puntos de 7 posibles, por encima de Gandalf, Zappa, Spike, Shredder y Fruit.

Así pues, Rybka logró su primer gran resultado en diciembre del 2005, seis meses después de la salida del código abierto de Fruit 2.1. Y aunque las coincidencias se dan, muchos expertos de ajedrez por computadora piensan que el éxito de Rybka se debe al código fuente de Fruit.

Pero todo lo anterior eran solamente rumores. Sin embargo, más recientemente estos rumores se han convertido en alegatos firmes, hechos por expertos en la materia y apoyados por evidencia que por lo menos de forma superficial, parecen darles la razón, debido a su naturaleza y el volumen de pruebas presentadas. Levy, no obstante esto, se reserva su propia opinión al respecto.

Primero, Zach Wegner, quien está desarrollando una nueva versión de Zappa, con el permiso de Anthony Cozzie, el programador original de este sistema. Wegner participó en el campeonato mundial del 2010 con su programa Rondo. Sus alegatos van así:


  • La evaluación de Rybka ha sido sujeta a mucha especulación desde su aparición. Para decirlo en términos sencillos, la evaluación de Rybka es virtualmente idéntica a la de Fruit. Hay un par de cambios importantes, sin embargo, que deben ser considerados en este alegato:
  • La más obvia es la traducción de la estructura de datos de Rybka de bitboards (tableros de bits). En algunas instancias, la evaluación de los bitboards, en lo que se refiere al peón, puede ser ligeramente diferente al software original (Fruit). Pero la funcionalidad de alto nivel es equivalente en estos casos. Los cambios parecen ser con respecto a una representación más natural de los tableros de bits.
  • La lógica de los finales y los empates en Fruit ha sido reemplazado por las tablas de finales en Rybka. Esto ya lo usan prácticamente todos los programas.
  • Todos los pesos sobre los criterios para jugar deben establecerse específicamente a mano. Debido a los valores poco naturales de Rybka, aparentemente estos se organizan de manera automática. Sin embargo, hay un par de lugares en donde los valores originales de Fruit son los mismos en Rybka. 


Vasik Rajlich, el autor de Rybka ha rechazado, desde que se dijo que su programa era un clon de Fruit, estos alegatos y de hehco escribió en el 2007: "La especulación de Osipov (creador de otro programa de ajedrez) es incorrecta. Rybka es y siempre ha sido código original, con la excepción de varios fragmentos de bajo nivel que están en el dominio público".

Poco tiempo después, Vasik escribió a Levy, diciéndole: "El código fuente de Rybka es original. Usé muchas ideas de Fruit, como he dicho muchas veces. Fruit y Rybka usan todo género de ideas comunes en el ajedrez por computadora".

Pero cuando se le preguntó si su respuesta significaba que el código fuente de Rybka 1 era todo original, Vasik replicó: "Todas las versiones de Rybka son originales en el sentido que yo siempre escribí el código fuente (con la excepción estándar de varios fragmentos de bajo nivel)"

Así las cosas, las dudas persisten, pero es claro que se ha arrojado una sombra sobre Rybka y su creador Rajlich. ¿Cómo probra que Rybka es una copia y no un trabajo original? Esto es algo que los otros desarrolladores buscan hallar para desacreditar y quizás, eliminar de las competencias computarizadas a uno de los programas de más éxito en este campo.

6 comments:

Arturo Espinosa (pupitetris) said...

Sencillo: que le pasen el código fuente a los jueces del evento, quienes firman un NDA. Se compila el código y de alli se ejecuta el programa para su participación en la competencia.

Morsa said...

No es tan fácil, Pupi. Los programas que juegan son comercialmente una mina de oro y los programadores no están dispuestos a mostrar su código así nomás porque sí.

saludos

Peter Draxux said...

Impresentables quienes hacen trampas. Yo acabo de empezar a hacer un programa que juegue desde 0. Si bien veo correcto analizar papers de lo que hay hecho, copiar código me parece algo terrible.
Más allá de todo me parece emocionante arrancar de cero con un programa. Uno puede sentirse orgulloso de su creación (aunque no sea un campeón mundial ni mucho menos), lo cual no sucede con una copia de código.
Estoy empezando a caer en el mundo del ajedrez gracias a esto de programarlo y este es uno de los primeros sitios que visito así que lo seguiré. Saludos!

Eduardo Sauceda said...

Manuel, he leído bastante sobre este caso y hay muchas precisiones a tu post. La principal: Nadie acusa a actual Rybka de ser un "clon" de Fruit. El término "clon" generalmente se usa para un programa prácticamente copiado de otro, sin mayores modificaciones. En este caso, se aduce que el Rybka 1.0 beta usa una función de evaluación casi idéntica al Fruit 2.1. (Para quienes saben de programación de máquinas de ajedrez, las dos funciones más importantes en un programa de ajedrez son la búsqueda y en un distante segundo término, la evaluación).

Peor aún, en una versión "prebeta" de Rybka (1.6, anterior al 1.0 beta), se encontró código copiado literalmente de Crafty, incluyendo errores y código obsoleto. Esto significa sin lugar a dudas, que Rybka usó código de otros programas en sus primeras versiones.

Para la ICGA estos son argumentos suficientes para la descalificación. Las reglas de la ICGA son muy claras, se requiere que el código sea original; si hay alguna parte copiada de otro programa se debe declarar en la inscripción del evento. Vas no declaró el uso de código "prestado" cuando compitió con su programa.

Nadie le quita el mérito a Vas, sus ideas hicieron un programa muy poderoso que dominó las listas de ratings por más de 5 años. Lo único que se está castigando es el uso de partes de otros programas en las primeras versiones de Rybka. Incluso es posible que en las versiones 3 y 4 de Rybka no se use ese código (para la versión 3 se contrató a Larry Kaufman para mejorar la función de evaluación).

Por otra parte, la negativa de Vas de mostrar su código, incluso a un especialista neutral acorado por él y la ICGA, indica que muy posiblemente él sabe que está en falta.

En fin, un caso triste, el escándalo no favorece a nadie.

Morsa said...

Eduardo,

entiendo lo que dices. en realidad se le acusa a Vas de plagio, lo cual es muy grave y lamentable. Si la función de evaluación es la de Fruit y vas no le da crédito a quien lo merece, pues hace mal y tan hace mal que él se ha quedado callado al respecto. Es más, siempre ha dicho que su código es original y ya vemos que no.

Ahora bien, ¿cuál es la diferencia real entre un clon y un programa que las funciones más importantes y fundamentales son meras copias de otros programas? porque es cierto que la interfaz puede ser muy original, única, hermosa, funcional, pero eso no es de lo que se discute aquí. en esos términos pienso que quizás Rybka sí es un clon de Fruit.

saludos

Eduardo Sauceda said...

Manuel, en lo primordial estamos de acuerdo, lo único que discutimos es semántica. Para mí el término clon es básicamente una copia con pocas modificaciones, parece que tú usas el término simplemente por compartir algunas partes.

En cualquier caso, el trabajo de Vas es impresionante. Aún aceptando que tomó partes "prestadas" de Fruit (el cual es código abierto con licencia GPL) fue durante muchos años el #1 en la lista de rating, usualmente con una amplia ventaja sobre el 2o lugar. Si fuera tan simple tomar un pedazo de un programa que no es de los mejores, y convertirlo en una superpotencia, pues muchos otros lo hubieran hecho.

Y lo tomado no fue un pedazo tan importante. La mayor parte de la fuerza de un programa de ajedrez se deriva de la función de búsqueda. Los árboles de variantes a fuerza bruta son muy ineficientes, se requiere eliminar variantes innecesarias y profundizar en variantes prometedoras para optimizar el tiempo de búsqueda. Al llegar al final de la variante, se procede a la evaluación de la posición resultante. La fuerza de Rybka procede de las ideas originales de Vas para mejorar la velocidad de búsqueda, no de la función de evaluación "prestada" (la cual, como ya dije, fue modificada por Kaufman para la versión Rybka 3). No sé a qué te refieres con lo de la interfaz gráfica, los engines sólo producen jugadas y evaluaciones en un formato estándar, que son interpretadas por un programa externo (Chessbase, Chess Assistant, Arena, etc).

El panel de la ICGA determinó que el Rybka 1.0 beta usó parte de código de Fruit 2.1, y en el Rybka 2.3 aún hay rastros de ese código. No revisaron el Rybka 3 ni el Rybka 4, pues es un trabajo muy arduo (para reconstruir el código fuente a partir del ejecutable se requiere ingeniería inversa, un proceso muy lento y tedioso). Además, Vas se negó a proporcionar el código fuente. Con eso es suficiente para su descalificación de los torneos ICGA.

La cuestión de violación de copyright es otro mundo. Desde luego, el autor de Fruit o la FSF (free software foundation) pueden demandar, y muy posiblemente consigan que un juez les de la razón y oblique a Vas a cumplir con los términos de la licencia GPL: Dar crédito y distribuir el código fuente de todo el programa que hace uso del código en cuestión.