El Concurso Internacional de Código C Ofuscado (abreviado IOCCC) es un
concurso de programación de celebración anual - con escasas
interrupciones - que busca encontrar el código C creativamente mas
ofuscado. Ha sido descripto como "una celebración a la opacidad
sintáctica de C".
El IOCCC fue alumbrado por Landon Curt Noll y Larry Bassel en 1984,
mientras trabajaban en el grupo de portabilidad de Genix para la
National Semiconductor. La idea del concurso surgió después que estos
compararan sus anotaciones sobre porciones de código fuente
especialmente problemáticas para depurar, en particular la shell de
Bourne (que empleaba macros en un intento de emular la sintaxis de
ALGOL-68), así como supinos errores de la implementación de finger para
BSD.
En comparación con otros concursos de programación, el IOCCC ha sido
descrito como "no tan serio" el mensuario Dr. Dobb's Journal.
Los participantes incriptos acreditan distintas instancias de código
fuente en lenguaje C por etapas, los que se somenten a evaluación
anónima por un panel de JueCes ("jueces de C"). Las Reglas de la
Competencia se enuncian durante las mismas rondas eliminatorias.
Por tradición, no se ofrece información sobre el número total de
inscripciones para cada competencia.
Las entradas ganadoras se premian por una Categoría, ya sea la de "Peor
abuso del preprocesador C" o la de "Comportamiento más errático". El
Premio consiste únicamente en ser anunciado en el sitio web de
www.IOCCC.com
El código ganador del vigésimo séptimo concurso, realizado en 2020 se
publicó en julio de 2020. Los concursos anteriores se llevaron a cabo en
los años 1984–1996, 1998, 2000, 2001, 2004–2006, 2011–2015 y 2018–2020.
Normas
Cada año, se publican en el sitio web del IOCCC las reglas del concurso.
Todo el material se publica bajo licencia Creative Commons BY-SA 3.0
Unported. Dichas reglas varían de un año a otro y anuncian junto a un
conjunto de pautas que intentan transmitir el espíritu de las Reglas. El
mismo Landon Curt Noll declara que "Hackear las reglas del concurso es
una tradición".
Estas reglas a menudo se declaran deliberadamente con resquicios que
anima a los concursantes a comprender y abusar. El código que saca
provecho de estos agujeros legales incluso pueden obligar a modificar
las Reglas para el concurso del año siguiente (lo que se considera
máximo honor).
Técnicas de Ofuscación empleadas
Las entradas propuestas a menudo emplean trucos extraños o inusuales en
el lenguaje de programaciòn, tales como forzar el uso del preprocesador
C para lograr cosas para las que no fue diseñado (en algunos casos
"espectacularmente", según el Dr. Dobbs, con una entrada que crea una
ALU de 11 bits en el preprocesador C), o bien evitar construcciones de
uso común en C en favor de otras formas mucho más oscuras para obtener
lo mismo.
Las contribuciones han incluido código fuente formateado para cobrar
similitud a imágenes y texto soeces, a la manera del arte ASCII,
redefiniciones del preprocesador para hacer que el código sea menos
legible o menos comprensible, y notablemente, el código automodificable.
Un ejemplo fue el programa de autorreplicante más corto del mundo: un
programa diseñado para generar su propio código fuente y cuya extensión
de código erae de cero bytes. Cuando se ejecutaba el programa, imprimía
cero bytes, equivalente a su código fuente.
En un esfuerzo por llevar la ofuscación a sus extremos, algunos
concursantes escribieron programas que incluso eluden los límites de los
C estándares, lo que da como resultados combinaciones de programación
raramente empleadas en los compiladores. Por ello suele suceder que los
casos más extremos del pasado no directamente no se compilen
directamente en un compilador moderno, y algunas pueden colgarse.
Ejemplos
Dentro del límite de tamaño de código de solo unos pocos kilobytes, los
concursantes lograron hacer cosas complicadas: el ganador de 2004
resultó un sistema operativo completo.
El Nanoajedrez de Toledo
El Toledo Nanochess es un motor de ajedrez creado por el desarrollador
de software mexicano Oscar Toledo Gutiérrez, cinco veces ganador del
IOCCC. De acuerdo con las reglas de IOCCC, tiene 1255 caracteres. El
autor afirma que es el programa de ajedrez más pequeño del mundo escrito
en C (aunque está sumamente ofuscado, claro está).
El 2 de febrero de 2014, el autor publicó el libro "Toledo Nanochess: El
código fuente comentado".
Este se trataba entonces de uno de los dos únicos motores de ajedrez
escritos en menos de 2 kilobytes de C, capaces de ejecutar movimientos
de ajedrez legales completos, junto al Micro-Max del físico holandés H.
G. Muller. En 2014, la barrera de 1 kilobyte fue superada por Super
Micro Chess, derivado de Micro-Max, que logra la azaña del juego ciencia
minimalista con un total de 760 caracteres (incluyendo espacios y saltos
de línea). Hoy ya existe una versión más pequeña del motor de Toledo, el
Toledo Picochess, que consta de 944 caracteres que no están en blanco ni
ofuscados.