Gestionando el conocimientoEl software libre es una innovación disruptiva que está alterando la forma en la que gestionamos el conocimiento en nuestras organizaciones
El software libre es una innovación disruptiva que está alterando la forma en la que gestionamos el conocimiento en nuestras organizaciones
David Santo Orcero es profesor asociado a tiempo parcial de la Universidad de Málaga, asesor estratégico y tecnológico de varias empresas y desarrollador de software libre.
También está disponible este blog por correo via feedburner, introduciendo aquí su correo en este enlace. Entrando en este enlace, recibirá un correo con cada post que realice, y no tendrá que volver regularmente a esta web. Puede darse de baja en este servicio cuando lo desee.
Una entrada rapidita. Ando muy liado, y no puedo dedicar mucho tiempo a la entrada; a pesar de que tengo que hacer una entrada como Dios manda respecto a mi opinión sobre lo que deberÃamos hacer con los estudios de ingenierÃa -incluyo informática en la categorización-.
Lo primero que debemos hacer es librarnos de ideas preconcebidas: si tomamos una base de código lo suficientemente grande, y miramos con una ventanita lo suficientemente pequeña, vamos a encontrar lo que busquemos.
(Está marcado con un circulo y unas flechitas por si algún chaval de 20 años o algún blogero influyente de la A-list tienen problemas en encontrarlo).
Bueno, ya sabemos el autor al que debemos achacar el problema. Pero esto no tiene importancia, porque acabamos de encontrar un posible problema de seguridad que nos parece gravÃsimo. Lo adecuado aquà es recordar que el CVS es una instantánea en el pasado de un proyecto, y que el problema puede ya estar solucionado. Seguimos con la imagen:
Bueno, esto parece que tiene cinco años… Y nadie parece haber tocado el código en cuatro años… o el proyecto está muerto hace cuatro años, o ya nadie usa ese CVS. ¿Que hacemos? Preguntar al mantenedor cual es la versión más reciente. Si no, podemos estar dando un parte de seguridad de un error que puede que fuera corregido hace tres años, y que el CVS no lo utilice nadie desde hace cuatro años. Especialmente si es un proyecto cuya historia desconocemos y no nos hemos tomado la molestia de informarnos.
Supongamos que con la emoción de un chaval de 20 años que ha encontrado un error de seguridad en un paquete con una complejidad que no entiende, queremos dar un parte de seguridad por el problema. ¿Que hacemos?
Niños, vamos a aprender un concepto clave: como se dan los partes de posibles vulnerabilidades.
Primero, se avisa al desarrollador del paquete con un correo, avisándole del problema. Lo más normal es que genere el parche y saque una nueva versión al momento.
Entonces, avisamos a los canales comunes de seguridad para administradores de sistemas, para que la gente actualice el paquete. Si el desarrollador no ha escuchado, es una buena idea -en el mundo del software libre, al menos- que hagamos el parche de seguridad.
Finalmente, cuando la vulnerabilidad tiene parche que protege el sistema, y los administradores pueden acceder al parche, se notifica a los medios masivos -tipo meneame-.
Mantiene una versión propia del paquete, liberada, desde hace cinco años.
Que ese problema es extremadamente difÃcil de explotar por como se utiliza la biblioteca, pero que el potencial problema fue eliminado en la versión del paquete de nuestra vÃctima hace más de tres años.
Que el proyecto está oficialmente cerrado.
Finalmente, que si se toma la molestia de ver las descargas en el sitio web que se pueden encontrar aquà verá que el número de descargas del kernel y de las herramientas de área de usuario deberÃa casar -unas no funcionan sin las otras-, pero no casan. La razón: que se utiliza la versión del desarrollador -y no la oficial- desde hace años de forma mayoritaria, por lo que la mayor parte de los sistemas no son vulnerables. Lo que hay que avisar es que los que usan las herramientas del CVS se deben pasar a las herramientas del objetivo de nuestro “show me the codeâ€
Si hubiese contactado primero con el mantenedor del paquete, cosa que se puede hacer en software libre y no en el privativo, el chaval de 20 años habrÃa aprendido un montón de cosas. Además, probablemente hubiese recibido una felicitación por parte del desarrollador de software libre -promete mucho con su edad y siendo capaz de llegar a ese punto, por identificar un problema potencial y saber gestionar la crisis-. Hubiese ganado un amigo. De esas redes de contactos va el software libre. No ha dado una falsa alarma -ya que la rama mayormente usada de ese paquete no tiene el problema-. Incluso el desarrollador le hubiese ayudado a rellenar la entrada en los canales de notificación respecto a la otra rama de código, para evitar que el chaval cometa algún error conceptual:
El error potencialmente es un buffer overflow de una aplicación local, que no toca red, no es servidor, no abre un socket; por lo que no deberÃas marcarlo como explotable remotamente. Además, por no consultar puede ocurrir que te saquen los colores en la propia lista de seguridad. Por cierto, nixpanic -el que le saca los colores a nuestro chaval- no es alumno ni empleado mÃo. Este es su perfil en linkedit. Se dedica a desarrollar drivers para linux.
Encontramos una joyita: un programa de casi 18000 lÃneas de código escrito en dos lenguajes -C importando con extern C y C++- en su versión 0.6, sobre el que la persona objetivo reclama la autorÃa completa. Falta apenas una cosa que no obtendremos: la documentación del análisis y los requisitos. Esto puede ser un problema; porque es difÃcil evaluar quien corre mejor o más rápido si nadie sabe cual es la meta. Pero bueno, hay cosas que se pueden verificar sin eso.
Entramos en el código, y vemos algo raro. Dejando a un lado que parte del programa está en C, y se incluye con extern C, y parte está en C++. El autor en numerosos puntos del programa en lugar de sumar una cantidad prefijada a un puntero, lo incrementa varias veces. Para que hasta el blogger prestigioso e influyente de la A-list o el chaval de 20 años puedan entenderlo, es como si en lugar de hacer:
Supongamos que no nos fiamos y desconocemos los rudimentos de la optimización en este tipo de programas. En ese caso, pedimos pruebas de que esto es asÃ. Al desarrollador de software libre hasta le hace gracia que se lo pidamos -puesto que es un clásico de las optimizaciones-, y nos manda un código en C:
void main()
{
char *psaux=0;
long int j=0;
for (;j<60000000;j+=2)psaux++;
printf("%d",psaux);
}
Lo compilamos -como nos dice- con -S y empleando -march para forzar código para una plataforma antigua -un athlon mismo nos vale-, y obtenemos algo como:
.L10:
cmpl $59999999, %eax
jle .L3
CÓDIGO RESTO PROGRAMA
.L3:
incl %ecx
addl $2, %eax
jmp .L10
con código optimizado con -O2, y:
.L10:
cmpl $59999999, %eax
jle .L3
CÓDIGO RESTO PROGRAMA
.L3:
incl -12(%ebp)
addl $2, %eax
jmp .L10
Si compilamos sin optimizar. En máquinas de 32 bits, el compilador genera un incl DESPLAZAMIENTO(%ebp), y optimizando -que es la opción por defecto en kradview-, genera un incl %REGISTRO. Entonces sabemos que nuestra vÃctima del show me the code tenÃa razón: incrementar el puntero es incrementar un registro; mientras que sumar un número supone leer al menos un entero de 32 bits de memoria, meterlo en registro y sumarle uno. Aunque en una máquina moderna la velocidad es similar, en una máquina que ya tenga algunos años la diferencia de velocidades es abismal. Una optimización guarrilla, pero que funciona.
Te respeto como persona -como a todas las personas-. Respeto tu aportación al software libre -como respeto a todos los que colaboran: haciendo contribuciones tan alucinantes como la tuya, tan miserables como la mÃa-. De hecho, a mà me parecen respetables todas las contribuciones, aunque sea traduciendo tres lÃneas de un fichero de configuración. A tÃ, veo que no. Defiendo el respeto a los desarrolladores de software libre, como ya los defiende toda la comunidad.
Otra cosa es que tú y yo tengamos una discusión sobre un tema concreto. En este caso, sobre el nivel formativo de los estudios de IngenierÃa en Informática, y sobre si un Colegio de Ingenieros en Informática es bueno o no para la sociedad -colegio que en muchas autonomÃas españolas ya es una realidad legal-. Pero discrepamos sobre una opinión manifestada en una entrada a tu blog: Entrada en la que tú mismo dices de tu propia boca lo poco que aprendiste estudiando tu carrera; no lo digo yo, lo has dicho tú mismo. Me he limitado a repetir lo que tú dices, y añadir que yo sà que lo he estudiado en mi universidad, y que estoy muy orgulloso de haber estudiado IngenierÃa Informática en una universidad pública de mi tierra.
Por mucho que discutamos, aunque me insultes -que yo no creo que te haya insultado- no te voy a hacer un show me the code como el que tu me has hecho. Si algún dÃa te audito tu código, te va a llegar un parche por correo electrónico, corrigiendo tus errores. Esa es la diferencia entre la critica destructiva y la constructiva. El problema no es que hayas mostrado mis vergüenzas, sino que no eran tales. El problema es que termina siendo mi capacidad de dar credibilidad contra la tuya, frente a gente que puede no entender los listados de código. Es un problema de popularidad, no un problema de buen código. El problema es que no tengo trabajo asegurado de por vida; soy un profesional de la IngenierÃa Informática, lo que no me permite quedarme impávido. Por otro lado no tengo todo el tiempo del mundo para hacer siete páginas de explicación cada vez que alguien como tú decide que saca doce lÃneas de contexto y me pone a parir. Si quieres hacerlo, estupendo. Es un paÃs libre. Pero luego no tengas la poquÃsima vergüenza de erigirte en paladÃn del software libre y speaker de la FSF para pontificar sobre lo divino y lo humano, cuando para cualquier persona con dos dedos de luces es aterradora la idea de que una persona con tu capacidad de difusión de información pueda hacer este tipo de cosas.
Sin embargo, lo que no termino de entender de Ricardo es otra de sus pulsiones: la de repetir incesantemente lo poco que aprendió en la carrera de informática. En este post comenta, entre otras cosas, que terminó una carrera de informática desconociendo programación orientada a objetos, lo básico de teorÃa de control, simulación no lineal, redes -por lo que cuenta, TCP/IP-, Prolog, Smalltalk, C, C++, la tansformada de Fourrier, y a programar y administrar Unix.
Y, Ricardo; no sabes lo que siento que no hayas podido aprender informática en tu universidad cursando estudios de informática, y hayas tenido que ir a aprenderlo a un laboratorio de fÃsica. Yo tuve la suerte de aprenderlo estudiando IngenierÃa Informática en Málaga.
En EEUU -un paÃs que ha sido democracia durante toda su existencia- popularmente se considera que el mejor candidato es el que cumple dos propiedades muy importantes, que modelan con dos preguntas.
La primera pregunta es: Si tuvieras que comprarle un coche usado a uno de los dos candidatos con mayor posibilidad de ser presidente del gobierno, ¿a cual se lo comprarÃas?
La segunda pregunta es: Ocurre un desastre nacional de extrema gravedad en España, y te ha tocado a ti la responsabilidad de su gestión. Tienes que llamar al Palacio de la Moncloa un domingo a las cuatro de la madrugada, para hablar con el presidente del gobierno, que será corresponsable contigo de la crisis. ¿A cual de los dos candidatos te tranquilizarÃa más oÃr al otro lado de la lÃnea telefónica?
Ya he hecho finalmente pública la última lista de notas que faltaba por publicar. Los resultados han sido excelentes, tanto en Fundamentos de los Computadores, como en Programación Lógica. Esta entrada es para mis ex-alumnos que han aprobado este año; para el resto de los lectores habituales de este blog probablemente os sea de poca utilidad.
El primero es un discurso excepcional de formatura impartido por Steve Jobs a los formados en Stanford en la promoción del 2005. Un discurso brillante, en el que comunica muchas verdades profundas, de las que lleva una vida aprender:
El segundo vÃdeo es de una música de Baz Luhrmann, cuya locución es -cambiando fechas- una columna de Mary Theresa Schmich publicada en el Chicago Tribune. Se ha convertido en todo un clásico, y seguro que lo conocereis.