Tienes razon en buena parte, pero veo que no se me entendio mi intencion al comparar un microkernel con una maquina virtual completa como la usada en Java.
Puse el caso de Java por ser un ejemplo popular que haga uso abundante de la abstraccion entre los niveles fisicos y logicos, o sea, en el que mediante capas logicas de abstraccion separamos los niveles mas cercanos al hardware, del sistema operativo (cualesquiera que sean las capas intermedias, segun cada caso) y a su vez de las aplicaciones que corran encima.
Una maquina virtual java ya monta el chiringuito ella solita, para que las aplicaciones corran encima. Por tanto sus binarios son siempre los mismos, independientemente del sistema operativo o el hardware que haya debajo, y el trabajo de la JVM será precisamente traducir ese bytecode a código ejecutable por la máquina real que hay debajo.
En un modelo microkernel no se llega a tanto, ya que lo que se busca es aislar el sistema operativo que pongamos encima, del hardware en el que corra, sobre todo para los aspectos más basicos: procesador, memoria, I/O, etc. El sistema operativo que pongas encima se desentiende de todo eso. Los que apoyan el modelo microkernel te podrian decir de carrerilla todas sus ventajas, pero son conscientes de que tiene sus desventajas claras, sobre todo por perdida de rendimiento, que tendrás que compensar afinando la optimizacion todo lo que puedas. Y que casualidad, Java tambien sufre esos problemas de rendimiento (ves como si que habia algunos aspectos comunes? :-)
A lo que ibamos. Mientras mas aislas el sistema operativo del hardware que hay debajo, más te despreocupas de él, y más cerca tienes el objetivo de ser multiplataforma que comentábamos. Una vez que portas las capas bajas (la chicha del microkernel), la portabilidad del sistema operativo que tienes encima es practicamente inmediata.
Decias: "Si, claro, igual que un binario Linux corre sin problemas sobre x86, PowerPC o sobre Sparc sin necesidad de recompilarlo. Lo que me faltaba por oir. Y no me digas que Linux es macrokernel, porque no tiene nada que ver en este caso."
La portabilidad de aplicaciones linux de una plataforma a otra es casi inmediata a nivel fuente. Tienes toda la razon en que no hay compatibilidad binaria ninguna. Es de cajón precisamente por ser monolitico. Sin embargo, si tu objetivo es tender a ser multiplataforma, y al mismo tiempo hacerte más modular y facilitar el desarrollo del SO y de lo que corras encima, puedes acercarte a él precisamente aislándote lo más posible del hardware subyacente. Esa es la linea de trabajo de la que estábamos hablando.
El tema es interesante, pero está ya muy manido, esta discusion viene del lejos, y tanto el modelo monolítico como el microkernel tienen sus pros y sus contras. Darwin y OS X han apostado por el microkernel mientras que Linux ha apostado por el modelo monolítico. Aunque existen proyectos como MkLinux que puso Linux precisamente encima de March3 para dar el salto al mundo microkernel.
Re:No nos liemos con los mach y los binarios...
(Puntos:2)( http://barrapunto.com/ )
Puse el caso de Java por ser un ejemplo popular que haga uso abundante de la abstraccion entre los niveles fisicos y logicos, o sea, en el que mediante capas logicas de abstraccion separamos los niveles mas cercanos al hardware, del sistema operativo (cualesquiera que sean las capas intermedias, segun cada caso) y a su vez de las aplicaciones que corran encima.
Una maquina virtual java ya monta el chiringuito ella solita, para que las aplicaciones corran encima. Por tanto sus binarios son siempre los mismos, independientemente del sistema operativo o el hardware que haya debajo, y el trabajo de la JVM será precisamente traducir ese bytecode a código ejecutable por la máquina real que hay debajo.
En un modelo microkernel no se llega a tanto, ya que lo que se busca es aislar el sistema operativo que pongamos encima, del hardware en el que corra, sobre todo para los aspectos más basicos: procesador, memoria, I/O, etc. El sistema operativo que pongas encima se desentiende de todo eso. Los que apoyan el modelo microkernel te podrian decir de carrerilla todas sus ventajas, pero son conscientes de que tiene sus desventajas claras, sobre todo por perdida de rendimiento, que tendrás que compensar afinando la optimizacion todo lo que puedas. Y que casualidad, Java tambien sufre esos problemas de rendimiento (ves como si que habia algunos aspectos comunes? :-)
A lo que ibamos. Mientras mas aislas el sistema operativo del hardware que hay debajo, más te despreocupas de él, y más cerca tienes el objetivo de ser multiplataforma que comentábamos. Una vez que portas las capas bajas (la chicha del microkernel), la portabilidad del sistema operativo que tienes encima es practicamente inmediata.
Decias: "Si, claro, igual que un binario Linux corre sin problemas sobre x86, PowerPC o sobre Sparc sin necesidad de recompilarlo. Lo que me faltaba por oir. Y no me digas que Linux es macrokernel, porque no tiene nada que ver en este caso."
La portabilidad de aplicaciones linux de una plataforma a otra es casi inmediata a nivel fuente. Tienes toda la razon en que no hay compatibilidad binaria ninguna. Es de cajón precisamente por ser monolitico. Sin embargo, si tu objetivo es tender a ser multiplataforma, y al mismo tiempo hacerte más modular y facilitar el desarrollo del SO y de lo que corras encima, puedes acercarte a él precisamente aislándote lo más posible del hardware subyacente. Esa es la linea de trabajo de la que estábamos hablando.
El tema es interesante, pero está ya muy manido, esta discusion viene del lejos, y tanto el modelo monolítico como el microkernel tienen sus pros y sus contras. Darwin y OS X han apostado por el microkernel mientras que Linux ha apostado por el modelo monolítico. Aunque existen proyectos como MkLinux que puso Linux precisamente encima de March3 para dar el salto al mundo microkernel.
Uff no me he enrollao ni ná...