logo linux

Torvalds echa la bronca a unos desarrolladores del kernel

El kernel de Linux se encuentra en constante evolución y permanentemente hay desarrolladores añadiendo mejoras, nuevas funciones y arreglos de fallos. Pero no todas las contribuciones son bienvenidas.

Hace un par de días se propuso el reemplazo de una interfaz del kernel por una más moderna. La respuesta de Torvalds a dicho cambio ha sido esta:

No.

No voy a hablar de otra «vieja interfaz obsoleta, reemplázala con esta nueva mejorada y fastidia cosas en el proceso».

Todo el tema del «kstrto*()» fue un error. Hemos provocado fallos importantes en la conversión a la interfaz «mejorada». La «todavía mejor» nueva interfaz ‘parse_integer()’ en realidad parece una auténtica mejora y trata del rompimiento del viejo código y de verdad quería que me gustara, pero luego vi las conversiones.

El PRIMER parche de conversión que vi de todos, tenía fallos. Eso me enfada. Toda la cuestión del «Y SOLO» de todo el asunto era para deshacerse de los fallos y evidentemente para ser una interfaz segura y luego el primer parche para la conversión resulta que está mal.

Dejadme que os lo enseñe:

        if (isdigit(*str)) {
–               io_tlb_nslabs = simple_strtoul(str, &str, 0);
+               str += parse_integer(str, 0, &io_tlb_nslabs);

y evidentemente nadie ha invertido ni un solo segundo en preguntarse a si mismo «¿qué ocurre si ‘parse_integer’ arroja un error?».

El viejo código no fallaba catastróficamente en caso de error. El nuevo sí lo hace.

Y sí, ‘parse_integer()’ en realidad puede arrojar un error, incluso a pesar de que «isdigit(*str)» verifique. Pensad en eso. O simplemente leed el código fuente.

Estoy muy cansado de estas «mejoras triviales obvias» que tienen fallos y en realidad introducen muchas formas de escribir código con fallos. Sí, el viejo código podía perderse un error. Pero el viejo código no crearía punteros inválidos como lo hace el nuevo código.

No tengo muchas ganas de seguir con el resto buscando otras pilladas. Pero estoy muy muy cansado de esta idiotez de «hagamos una nueva interfaz que haga las cosas bien» y luego no hace las cosas bien para nada. Esto no es solo un asunto del análisis de números; tenemos problemas similares con la imbecilidad y mal diseñada mierda llamada «strlcpy()», que fue introducida por razones similares y también ha provocado fallos feos donde el viejo código en realidad era correcto y la «conversión para interfaces mejores y más seguras» era código con fallos.

Mezclar el manejo de errores y la actualización de la cadena fue un error. Sin embargo, no mezclarla provoca su propio conjunto de problemas.

Pero sea cual sea la resolución final, no voy a coger esos parches. De ninguna forma. Me gustaba como lo hace la plantilla basada en la escritura automática pero no me gustan los fallos inevitables que se puedan provocar en una conversión a gran escala de una interfaz que se ha usado hasta ahora. La gente que implementa nuevas interfaces y mejora las existentes parece que siempre lo hacen mal.

Linus.

Como vimos en la entrevista a Torvalds hace algo menos de un mes, su poder radica en decir ‘no’. Y como él mismo dijo, suele decir no de una forma vistosa. Así que este es el ‘no’ para la modernización de una interfaz.

Tenéis el mensaje en la lista de correo del kernel.