Quizás a algunos no les guste. Que narices, sé que a algunos no les gusta. Les hay que hasta piensan que es malo simplemente porque 2) tienen éxito (fiel al virus de la envidia nacional que siempre nos hizo despreciar a aquellos que sobresalen algo, bajo el principio de "si alguien tiene más éxito en la vida que yo algo malo habrá hecho") y 2) porque trabaja en español y no en inglés. Con respecto a esto último y antes de que me lo digan, no tengo nada contra la cultura americana y de hecho ahí esta la verdadera riqueza, en absorber cosas buenas de otras culturas, pero por cierto me parece una obscenidad que la gente en vez de absorber cosas de una cultura sustituya sistemáticamente la suya por otra, la de la tierra donde nació y a la que está atado irreversiblemente aunque pretenda o intente lo contrario. Que es lo que hace la mayor parte de la juventud en el día de hoy (echad un ojo a vuestros contactos del messenger para ver cuantos ponen frases emotivas/filosóficas en inglés pero nunca las ponen en español, o las frases de las camisetas que lleva la gente por la calle, o los anuncios de la tele). Algo que incluso estaría bien si no fuera porque hoy en día se hace por la presión de la vulgar moda y por la invasión cultural que a largo plazo tendrá el mismo efecto que tuvo el latín en su día - sumado al poderoso efecto globalizador de las nuevas tecnologías que han acabado con la raiz que hacía que antiguamente surgieran varias lenguas con el paso del tiempo: la distancia
Pero bueno, siempre he pensado que quien no piense que Sabina no es de los mejores músicos en lengua española de la época que nos ha tocado vivir (sin olvidar a otros como Serrat, Javier Krahe, Paco Ibañez, Yoshi) es porque no se ha parado a escucharlo. Incluso la derecha más extrema y culta (la cultura y la inteligencia no son incompatibles con la política) se ha quejado en público a veces de que alguien así anda soltando republicanadas y defendiendo la revolución cubana (mientras que la izquierda le critica por firmar manifiestos a favor de la libertad de expresión en Cuba, o por invitar a cenar a su casa a Letizia y Felipe, por - por supuestísimo - haberse vendido a las multinacionales). En cualquier caso, a mi me gusta (entre otras cosas, porque soy consciente de las canciones y quienes las hacen son dos entes separados) y me gustó este comentario sobre la piratería que le hicieron en esta entrevista. Hay que señalar que no especifica nada de descargas de internet o piratería, porque en mi opinión la piratería real (la de verdad) es muy criticable y debería ser castigada
P: Estos días afirmaba que los verdaderos tiburones de la industria discográfica no están en el 'top manta' sino en las grandes compañías. ¿Lo comparte?
-En primer lugar, la gira que ahora comienzo se llama 'Carretera y top manta', lo que ya puede ser indicativo. En segundo lugar, jamás me he prestado a suscribir con mi firma ningún manifiesto contra el 'top manta'. Y, desde luego, creo que los grandes piratas de la industria discográfica están en las multinacionales. Sé que perdemos dinero con el 'top-manta', pero quienes más pierden son los que más ganan. Así que vaya lo uno por lo otro.
11 de mayo de 2006
Músicos hablando sobre la pirateria (pero solo al final del todo)
10 de mayo de 2006
Sobre el mito de que el modelo de seguridad de Unix protege a Linux y Mac OS X
Nadie me lo ha pedido pero que narices, los blogs son para hablar de lo que a uno le da la gana, algo que a las masas intelectualoides les parece absurdo y motivo de análisis pero que a mi me parece estupendo. Si se hiciera una encuesta sobre cual es la estupidez más estúpida de las que ha hecho Microsoft en sus sistemas operativos, la de no utilizar cuentas de usuario sin privilegios en un sistema operativo que las soporta como lo es XP quedaría de las primeras. Se oye mucho a los linuxeros. Que si en Linux los usuarios utilizan cuentas sin privilegios y que por lo tanto son mucho más seguros, porque al fin y al cabo si intentaran meterte un virus a través de un exploit del firefox como mucho te joden tu directorio personal, y el resto del sistema permanece a salvo.
Y sin embargo, todo eso importa un carajo. No es que el sistema tradicional de permisos Unix y de ACLs que utilizan linux, mac os x y XP no funcione, que funciona. El problema es que desde el punto de vista del usuario y de sus datos, a pesar de que estar utilizando cuentas "protegidas" el sistema está funcionando en cierto modo como administrador. Como root. Creo que han hecho falta ciertos tipos de virus presentes en los entornos Windows para darnos cuenta - los que nos fijamos - de ello; de que hasta cierto punto los privilegios de la cuenta que el usuario utilize no importan una mierda
La idea básica es que todo usuario por definición almacena toda su información en su directorio personal. Por tanto si pierde la información de ese directorio pierde todo lo que tiene. Me explico: Si yo tengo mi correo, mis fotos, mis documentos, mi lista de contactos, mis programas, mi código, mi música...lo que sea, en mi directorio, y alguien encuentra una vulnerabilidad en el firefox o el safari, y utiliza esa vulnerabilidad para borrar todos los archivos de mi cuenta, me está borrando todo. No, no ha tocado el resto del sistema: Puedo arrancar de nuevo, puedo crear una nueva cuenta....¿pero de qué me sirve conservar el sistema operativo si he perdido todos los datos que tenía en mi sistema?
El problema no es nuevo. El modelo de seguridad de "tu eres el usuario fulanito y tu menganito, y ambos teneis acceso a las cosas de cada uno pero no a la de los demás" que utiliza Unix funciona únicamente en entornos multiusuario: En entornos donde hay varios usuarios y aislar a varios usuarios entre si tiene sentido. Lamentablemente, el entorno típico de los ordenadores de escritorio es el de un ordenador, un usuario, y cada vez más se tiende hacia ese modelo
Por eso estaba pensando que en el fondo, el que XP cree cuentas como administrador realmente no importa demasiado en el caso de ordenadores con un solo usuario. Si, pone ciertos límites. Pero como decía, los virus de Windows nos han demostrado que eso no sirve de nada Creo que hay mucha gente que no es consciente de que existen virus que funcionan perfectamente en cuentas restringidas. Uno de esos "worms" que te llegan por correo y que requieren que les hagas doble click para funcionar: pueden leerte las direcciones de correo de tu libreta de contactos y autoenviar copias de si mismo sin necesidad alguna de privilegios de administrador. Y quien dice correo, dice uno de esos worms que mandan un mensaje vía IM sin invervención del usuario, con un enlace a una URL y un texto amigable con el que intenta hacer pasarse por persona, con el objetivo de que te bajes el archivo de la URL - que casualmente es una copia del virus - y lo ejecutes. Incluso pueden autoiniciar un programa cada vez que el usuario haga login. ¿De qué nos sirven las cuentas restringidas si como decía antes, un exploit del navegador - firefox, safari - puede acabar con cualquier archivo de tu cuenta?
Por eso SELinux (y las correspondientes alternativas de Vista y de Mac Os X) es tan importante: Modelos de seguridad completamente distintos donde un usuario puede no tener permiso para acceder, desde un programa, a un archivo que él mismo ha creado. Con SELinux se puede puede decir al sistema operativo que, por ejemplo, firefox solo pueda acceder a ~/.mozilla/firefox y que solo acceda a puertos 80, de manera que si es afectado por un exploit no tendrá permiso para tocar nada más. Esto permite ir más allá del modelo Unix, y conseguir un sistema que protege a todos los niveles - o al menos que lo permita. Que permita que un exploit en mi navegador no me mande al traste el resto del sistema.
9 de mayo de 2006
Microkernels again
Pavel Machek ha dicho un par de cosas sobre lo que piensa del último artículo de Tanembaum sobre construcción de sistemas operativos.
El tema este empieza a ser cansino. No en vano un servidor escribió un artículo sobre por qué los kernels monolíticos no son el fin del mundo, que fue aceptado y publicado en osnews: algunos estamos cansados de los weenies de los microkernels. Desde los que demuestran su más absoluta ignorancia del tema afirmando que Mac OS X es un microkernel a los que no son ignorantes, pero insisten en dar la lata y en no atenerse a hechos.
Tanenbaum no es tan diferente a veces. Es bueno que sea escéptico y que trate de mejorar las cosas, porque solo los que intentan mejorar las cosas y lo consiguen son los que hacen progresar. El problema es cuando la investigación deja de ser investigación para convertirse en una obstinación. Para que lo voy a negar, el artículo deja ver ciertas cosas que dan risa. Ya las comenta Pavel en su blog. Por ejemplo, el típico mito de que Minix solo ocupa 4500 lineas y el kernel 2.5 millones y que por lo tanto no se puede verificar la correción de Linux. Lo que Tanembaum olvida mencionar en su microuniverso es que un microkernel es un microkernel y que por definición necesitas servidores en espacio de usuario para implementar los drivers, y que implementar toda la funcionalidad, los miles de drivers y varias decenas de arquitecturas de linux sobre un microkernel tomaría aproximadamente.....2.5 millones de líneas de código.
Otra cosa que olvida mencionar y que Pavel si que menciona, es que los dispositivos pueden hacer cascar al sistema. Y no solo eso, Pavel asegura que dado que la mayor parte de los dispositivos utilizan DMA de una manera u otra, pueden utilizar el DMA para sobreescribir zonas aleatorias de memoria. Por no mencionar que tocando los registros adecuados pueden bloquear el bus pci y colgar la máquina de mil maneras diferentes, y todo eso al margen de que los drivers estén implementados en espacio de usuario o no. Eso significa, que uno no puede decir que un driver es simplemente "otro proceso más". Un proceso que puede tirar la máquina no es "un proceso más". Me carcajeo literalmente, partiendome el culo con los que responden a las noticias de que el kernel linux tiene demasiados bugs diciendo que los microkernels son la solución. ¿Qué metodología utilizarian para mantener los 2.5 millones de líneas de código que se necesitan para implementar los drivers equivalentes a los que tiene Linux hoy? ¿Qué metodología utilizarian para asegurar que ninguna de esos 2.5 millones de líneas toca el registro adecuado y cuelga la máquina? ¿La palabra mágica "microkernel" soluciona los problemas magicamente? En fin....
Tampoco ha comentado las dificultades de depuración. El propio Stallman ha contado lo mal que lo pasan los de Hurd, porque mientras que en un kernel monolítico puedes obtener un backtrace mirando a la pila del proceso del lado kernel (los procesos tienen una pila en espacio de usuario y otra en el kernel), en un microkernel casca un servidor pero no sabes nada de lo que ha pasado con los demás
Para hacerse una idea: un kernel monolítico es como un programa compartido a partir de librerias compartidas. Gaim, por ejemplo, utiliza las librerias de las GTK, libc, fontconfig (ldd /usr/bin/gaim). Pero todo eso en tiempo de ejecución se ensambla en un solo programa en memoria que tiene un solo espacio de direcciónes. Es decir, un fallo en libc puede sobreescribir una sección de datos destinada a la GUI, y mandar el programa entero a paseo
Los microkernelistas aquí tambien se ensañarían. Se ensañan ahora con el kernel, pero esto en realidad es aplicable - como no podía ser de otra forma - a todo software. La propuesta de los microkernelistas aplicada a gaim, y a todo software de escritorio consitiría en crear un servidor para libc, otro para gtk, otro para fontconfig. ¿Por qué no? Se trata de la misma idea aplicada de exactamente la misma manera. Y aplicable, por si algún bravo se atreve a decirme que no son ejemplos comparables. Son ejemplos perfectamente comparables. Y cuando el software en espacio de usuario se complique más y las librerias a las que enlaza un ejecutable sean cientos, surgirán - la historia siempre se repite - movimientos sugiriendo la aplicación de este modelo a la producción de software en general. Lo digo aquí y dentro de diez, veinte años lo veré, porque el ser humano es gilipollas. ¿Por qué debería perder la voz y video de mi videoconferencia solo porque la interfaz de usuario (la interfaz de un programa 10x o 100x más complejo de lo que solemos ver hoy) ha tenido un fallo y no se reinicia el programa y sigo en el punto en el que estaba?
La postura de los kernels se trata de un extremo, un extremo sin duda influenciado ideológicamente por las mismas fuentes que influenciaron a la programación orientada a objetos, concretamente la encapsulación (nada sorprendente, porque los microkernels nacieron como una proyección de las inquietudes de los que crearon la orientacion a objetos sobre el núcleo del sistema). Como suele pasar con los extremos, en la práctica no es todo lo bueno que debiera ser. Supongo que su sueño sería isolar totalmente a cada uno de los objetos y que cada uno fuera realmente un proceso, o algo asi. Tampoco es bueno el extremo contrario: En el dibujo del Gaim falta el servidor X, por ejemplo. En Linux falta hablar de los drivers en espacio de usuario que tenemos con libusb o con X.org o con CUPS. Ni tan siquiera es problema de rendimiento: el propio Linus Torvalds escribió algunos buenos emails tratando de analizar lo ideologicamente sospechoso que es querer separar a un sistema de archivos de ciertas partes de la gestión de memoria
La clave de todo el asunto es el concepto de espacio de direcciones. Es algo asi como lo de la latencia y el ancho de banda, muy filosófico: Puedes implementar algo utilizando un espacio de direcciones, o puedes dividirlo en tareas e isolarlo del mundo (vease: el servidor X en Unix). ¿Cuando se debe tender a un extremo y cuando al otro? Sospecho que como en lo de la latencia y el ancho de banda no hay respuesta única, sino que hay que adecuarse a las necesidades, y al igual que un juego en red se optimiza para latencia y un servidor FTP para el ancho de banda habrá que analizar cada situación y decidir en consecuencia
UPDATE: El mismo día que escribi esto, Linus escribió una respuesta con respecto al tema de los microkernels. Me agrada saber que coincido con él en el tema de los espacios de direcciones:
"The real issue, and it's really fundamental, is the issue of sharing address spaces. Nothing else really matters. Everything else ends up flowing from that fundamental question: do you share the address space with the caller, or put in slightly different terms: can the callee look at
and change the callers state as if it were its own (and the other way around)?
y otras partes igual de buenas pensando en profundidad sobre el problema:
The fundamental result of access space separation is that you can't share data structures. That means that you can't share locking, it means that you must copy any shared data, and that in turn means that you have a much harder time handling coherency. All your algorithms basically end up being distributed algorithms.