Cambios
Lo que trae cada versión. Las notas de las releases de GitHub salen de aquí
(scripts/publicar-release.sh lo lee), así que esto es la única copia: una
lista de cambios escrita a mano dentro del script de publicar se queda con la
de la versión anterior el día que alguien tiene prisa.
Una sección por etiqueta, encabezada con ## y el nombre de la etiqueta.
v0.10.0
MIKE OS arranca en muchos más equipos. Casi todo lo de esta versión es hardware que no funcionaba sin decir nada: el kernel compilaba, la imagen arrancaba en QEMU, y en el portátil concreto simplemente faltaba el Wi-Fi, el sonido o el disco.
Kernel: la estable de kernel.org
- Linux 7.2.9, la última estable (publicada el 3 de octubre). Antes era un commit de la rama de desarrollo tomado en mitad de la ventana de fusión de 7.3 — doce mil cambios sin probar que nadie había publicado como versión. Fijado por etiqueta y por commit: si la etiqueta cambia en el servidor, el build se para.
scripts/actualizar-kernel.shtrae la estable del día, aplica los parches, comprueba choques y opciones, y sólo entonces la fija. Antes iba a la rama de desarrollo y buscaba los parches en una carpeta que no existe.- Dos parches de Surface adaptados a mano. Aplicados con fuzz habrían
entrado sin queja y dejado tres choques: el bit de
btusbpara la Marvell de Surface ya era otro flag en 7.2.9, y la Type Cover quedaba con el mismo bit que una peculiaridad de otro teclado y con el mismo número de clase que el ASUS ROG Z13 — le habría estropeado el teclado a otro equipo.
Drivers que faltaban
Aquí todo va compilado dentro del kernel: un driver que falta o que queda como módulo es un equipo que no funciona.
- Intel VMD (el "RST" de muchas BIOS Intel desde la 11.ª generación): sin él el instalador no veía ningún disco.
- Gráficas:
xe(Intel Lunar Lake y Arc Battlemage, quei915no lleva) yradeon(AMD anteriores a GCN y las HD 7000/R9 200, que no tenían ningún driver). - Wi-Fi 7 de Intel (BE200/BE201), Ethernet Intel de 2,5 Gb y Broadcom
— este último se pedía como
TG3, que no existe: el símbolo esTIGON3. - Compartir internet desde el móvil por USB (Android antiguo e iPhone):
m-driverslo recomendaba cuando no hay red, y no funcionaba. - Touchpads Elantech y Synaptics con dos dedos, receptores Logitech, lectores de tarjetas Realtek, sonido de portátiles AMD modernos y los amplificadores de altavoz Cirrus/TI.
- Drivers de cada marca de portátil: no había ninguno salvo Surface. ThinkPad, IdeaPad, ASUS, HP, Dell, Acer, MSI, Samsung, LG, Huawei, Gigabyte, Fujitsu, Sony, Panasonic y Toshiba: teclas de brillo y volumen, modo avión, retroiluminación, límite de carga y perfiles de ventilador.
- Temperatura (Intel DPTF) y energía de los Ryzen portátiles (AMD PMF), que se caía en silencio por una dependencia.
Firmware que nunca llegó a la imagen
- El copiado del firmware no entraba en subcarpetas.
ath10k/*sólo encuentra carpetas, y el bucle se las saltaba: el Wi-Fi Qualcomm/Atheros, de los más comunes en portátiles, no tuvo firmware nunca. Lo mismo el Wi-Fi 7 de MediaTek (mt7925), el de NVIDIA (0 de 519 archivos) y el de las Surface Pro (Marvell). El comentario del script decía que sí estaban. regulatory.dbno estaba: todo el Wi-Fi, de cualquier marca, iba en el dominio regulador "mundial", con menos canales y potencia en 5 GHz.- Sonido de los portátiles Intel desde 2019 (SOF): 57 MB que en la ISO ocupan 2,8.
tests/firmware.shcruza lo que piden los drivers con lo que lleva la imagen. Antes de este cambio encontraba 15 drivers dentro del kernel sin un solo archivo de su firmware.
Microcódigo de la CPU
No se había cargado nunca, en ningún equipo. El kernel sólo lo coge del
principio del initramfs, y ahí no estaba; la imagen lo dejaba en
/lib/firmware, donde no lo mira nadie, y m-drivers recomendaba instalar un
paquete que hacía lo mismo. Ahora va delante del initramfs, para AMD e Intel:
son los arreglos de los fabricantes para fallos de la propia CPU (Zenbleed,
o la degradación de los Intel de 13.ª y 14.ª generación).
Particionado manual en el instalador, como en Calamares
- Cuarta opción en el paso del disco: "Particionado manual", junto a borrar el disco, instalar al lado y reemplazar una partición. Haces las particiones con GParted, lo cierras, y eliges en cuál va MIKE OS; se reutiliza la partición EFI que haya.
- GParted va dentro de la ISO y funciona sin internet. Antes era una
tarjeta aparte que había que descargar, y sin red salía desactivada —
justo cuando más se instala. Sale en el idioma del sistema (hace falta un
locale de verdad: se genera
es_ES.UTF-8sólo para él, porque en todo el sistema cambiaría los decimales a coma y rompería scripts que leen números). - Al cerrar GParted el instalador vuelve a leer el disco. Antes seguía enseñando las particiones de antes de tus cambios.
- El texto de arriba ya no dice "se borrará todo lo que haya en el disco" en los cuatro modos, también al instalar al lado de Windows.
- Probado de punta a punta con firmware UEFI: particionar a mano, instalar en la partición elegida reutilizando la EFI, y arrancar lo instalado.
Arranque dual con Windows
- El instalador no podía registrar MIKE OS en la UEFI:
efivarfsiba como módulo en un kernel que no carga módulos. Al lado de Windows eso significa que, después de instalar, el equipo seguía arrancando Windows. Además usaba--part 1fijo y apuntaba al kernel saltándose GRUB (sin menú para volver a Windows). Ahora: dos entradas, GRUB primero y el kernel detrás como respaldo, en la partición EFI que sea. - La primera actualización de kernel borraba GRUB: el paquete del kernel
copiaba el kernel encima de
EFI/BOOT/BOOTX64.EFI, que es donde el instalador pone GRUB. - El kernel anterior se puede arrancar desde el menú tras una actualización. Se guardaba, pero no había forma de llegar a él.
- Una carpeta de fabricante con un espacio en el nombre se perdía al buscar otros sistemas, y si se encontraba, GRUB partía su ruta en dos.
Seguridad
m-sudolimpiaLD_PRELOAD,LD_LIBRARY_PATHy compañía antes de dar root, y fija su propioPATH.mpmrechaza nombres de paquete del catálogo remoto con caracteres que podrían romper las comillas de una orden de shell.
Que no vuelva a pasar
tests/estatico.sh: todo lo que se comprueba sin arrancar una máquina, de una vez.tests/kernel-config.sh: lo que pide el fragmento acaba de verdad en el kernel (elTG3que no existía,AMD_PMFcayéndose, los módulos que aquí no se cargan). Y nada escrito dos veces.scripts/choques-kernel.py, dentro del build: se para si un parche deja un valor repetido.tests/menu-dualboot.sh: el instalador encuentra a Windows.tests/instalar-uefi.sh: la primera prueba que instala. Arranca el USB con firmware UEFI real y un disco vacío, instala sin preguntas, apaga, quita el USB y vuelve a encender con la misma NVRAM: comprueba que arranca por la entrada "MIKE OS", pasando por GRUB, con el kernel, el idioma y los subvolúmenes que tocan. 13 comprobaciones.tests/probar-arranque-uefi.sharranca ahora la ISO por defecto. Su modo anterior (sólo kernel e initramfs) no podía pasar desde hacía meses y daba "nunca llega a contestar" en arranques correctos.- La imagen EFI de la ISO se dimensiona según lo que mide GRUB: tenía 16 MB fijos "porque GRUB ocupa unos 2", y GRUB ya ocupa 17 — la ISO dejó de construirse.
- El kernel se llama
7.2.9-mikeosy no7.2.9-dirty. - El firmware que llega sin comprimir (el sonido de Intel) se comprime al copiarlo: el kernel lo abre igual.
v0.7.0-alpha
MIKE OS habla inglés. No la web: el sistema.
Desde la primera versión, el instalador abre preguntando "Choose your language", ofrece English y Español, y debajo promete que se puede cambiar luego en el Centro de Control. Las dos cosas eran mentira. La elección se usaba sólo para los avisos del particionado durante la propia instalación y no se guardaba en ninguna parte; en el Centro de Control no había dónde cambiarla. Elegías English, instalabas, arrancabas, y tenías un sistema entero en español. Un idioma que se pregunta y luego se ignora es peor que no preguntarlo.
El idioma, de verdad
m-idioma: el único sitio donde vive la respuesta. Lo leen la pantalla de bienvenida, la barra, el Centro de Control, la pantalla de bloqueo y el informe de hardware. Vive en/etc/mikeos/idiomay no en el$HOMEde nadie, por lo mismo que la preferencia de energía: lo escribe quien usa el escritorio, pero también lo leen procesos que corren como root.- Centro de Control → Sistema → Idioma, que es exactamente donde el instalador llevaba años diciendo que estaría. El cambio se ve al instante y en toda la ventana, sin cerrar sesión: todo lo que se pinta pasa por una función que depende de esa propiedad, así que moverla vuelve a evaluar cada enlace.
- El instalador lo guarda (
m-install --idioma). Lo que se elige en la primera pantalla es lo que arranca en el disco. - La pantalla de bloqueo también. Es otro programa — Quickshell la carga aparte —, así que el diccionario está en un singleton compartido en vez de en la barra. Con él dentro de la barra, la única pantalla que ve alguien que todavía no ha entrado se quedaba en español.
El informe de hardware, en el idioma del sistema
m-drivers no se queda en la terminal: sus cadenas se pintan en la bienvenida
y en el apartado Controladores. Ahora las categorías y los detalles se
traducen; los estados (ok, sin-driver, sin-firmware, ausente) no, a
propósito: son identificadores que otros programas comparan para decidir qué
icono pintar, y traducirlos los rompería a todos sin un solo error visible.
El menú de arranque
El del USB, en los dos idiomas a la vez: GRUB corre antes de que exista el sistema donde vive la elección, así que no hay forma de saberlo. El del disco ya instalado sale en uno solo — ahí la respuesta ya se tiene, y un menú bilingüe permanente es ruido.
Que no se degrade
tests/traducciones.sh(13 comprobaciones) compara, archivo por archivo, lo que se pinta contra lo que está traducido. Hace falta porque una traducción se rompe en silencio: nadie ve un error, simplemente una frase sale en español en mitad de una ventana en inglés. Lo que se decide dejar igual (nombres propios, teclas) va en la lista con su traducción idéntica, para que la prueba distinga "decidido" de "olvidado".scripts/capturas.sh --idioma en: las capturas de la web inglesa se sacan de un escritorio que habla inglés. Hasta ahora la web inglesa enseñaba capturas en español — lo único que delataba que era una traducción y no un sitio propio.
La pantalla de bienvenida salía mal, y nadie lo veía
Tenía dos juegos de reglas de Hyprland para flotarla y centrarla, en dos
sitios del mismo archivo, y no funcionaba ninguno: tres líneas usaban
windowrulev2, que Hyprland 0.56 eliminó, y las otras escribían float sin
valor, que esta versión rechaza. Hyprland descarta una regla inválida y sigue
arrancando, así que salía tileada a pantalla completa —con el contenido en la
mitad de arriba y un vacío enorme debajo— desde hace meses. Es la primera
pantalla del sistema y la foto de portada de la web.
Ahora hay un solo juego de reglas, con la sintaxis que esta versión acepta, y
tests/humo.sh le pasa a Hyprland cada windowrule del archivo para
comprobar que no rechace ninguna en silencio.
Al arreglar eso apareció el fallo de debajo, que era peor: en un portátil de
1280x800 la ventana era más alta que la pantalla y el botón de continuar
quedaba fuera. En el USB en vivo eso es quedarse encallado en la primera
pantalla del sistema, sin nada que pulsar. gtk_window_set_default_size() es
un tamaño por defecto, no un máximo: GTK nunca encoge una ventana por debajo
del tamaño natural de su contenido. Ahora el cuerpo va dentro de una zona que
se desplaza y el pie con el botón se queda siempre visible.
No se había visto nunca porque la máquina de pruebas corre a 1920x1080, donde
cabe de sobra, y porque la pantalla de "versión de prueba" sólo aparece
arrancando en vivo — justo el camino que no se probaba. tests/humo.sh
comprueba ahora que la ventana quepa entera, no sólo que flote.
Y el separador del menú de arranque pasó de · a un guión: la fuente que
carga GRUB antes de que exista ningún sistema no tiene ese carácter, así que
salía un cuadro vacío en mitad de cada entrada. Eso sólo se ve mirando la
pantalla.
Arreglado de paso
.gitignoretenía*.iso, que también tapababuild/grub/grub.cfg.iso. El menú de arranque que ve todo el que enciende MIKE OS llevaba desde el principio fuera del repositorio: sin historia, sin copia, y lo habría borrado ungit clean.- Y
build/web/tapaba las capturas, que no son salida generada: salen de una máquina arrancada conscripts/capturas.sh. Seis estaban en el repositorio de antes de esa regla y el resto —el instalador entero, el menú de arranque, la pantalla de bloqueo— existían sólo en un disco. scripts/qmldir.shllevaba el nombre del único singleton escrito a mano. El segundo salía declarado como componente normal, y QML entonces crea una copia por cada uso — cada una con su propio estado, que es justo lo que un singleton existe para impedir. Ahora lo detecta leyendo el archivo.- El Centro de Control se puede cerrar desde fuera (
quickshell ipc ... call ajustes cerrar). Las capturas lo cerraban con un clic en el hueco de al lado, que dejaba de funcionar en cuanto había una ventana debajo. - SUPER+W y los dos botones de "Tu equipo" de la bienvenida no hacían
nada. Llamaban a
quickshell ipc call ...sin decir qué configuración, y eso busca una llamadadefaulten<XDG_CONFIG_HOME>/quickshell/shell.qml— que no es donde vive la de MIKE OS, y la sesión tampoco exporta esa variable. El error se lo quedaba un proceso lanzado en segundo plano: al pulsar, no pasaba nada y no se decía por qué. Ahora todas llevan--path, ytests/traducciones.shrechaza cualquier llamada sin selector.
v0.6.0-alpha
Casi nada de esta versión son funciones nuevas: es hardware que decía funcionar y no funcionaba. Cada punto de abajo es una avería real que no dejaba ni un mensaje de error, que es justo por lo que duraron tanto.
Energía
- Perfiles de energía (
m-energia, y apartado propio en el Centro de Control): máximo, equilibrado, ahorro y automático. En un sobremesa, automático ya significa máximo — no hay batería que cuidar, y lo que se ahorra dejando dormir los buses son unos vatios a cambio de latencia en todo lo que se toca. - En un portátil se elige además qué hace al cerrar la tapa: apagar la
pantalla, suspender, hibernar o nada. Suspender e hibernar sólo se ofrecen si
el equipo los publica de verdad en
/sys/power/state, e hibernar exige además swap del tamaño de la RAM. La sesión se bloquea siempre al cerrar. - La elección vive en
/etc/mikeos/energia, no en el$HOMEde nadie: la escribe quien usa el escritorio y la lee el servicio de runit, que es root. Con el archivo en~/.configel perfil se perdía en cada arranque.
Controladores
- Apartado de controladores en el Centro de Control y en la pantalla de bienvenida. Analiza gráfica, red por cable y por USB, Bluetooth, sonido, entrada, cámara, discos, procesador y batería, y dice en cuál de cuatro estados está cada cosa: funciona, sin driver, le falta firmware, o detectado pero parado. Cuatro averías distintas con cuatro soluciones distintas que desde fuera se veían todas igual.
Bluetooth
- Arreglado de raíz. El firmware estaba en la imagen desde el principio. El
problema es que
btusbse engancha al adaptador antes de pedir el firmware, así que desde/sysun adaptador muerto era indistinguible de uno sano: tenía driver. Ahora se rescata desenganchando y reenganchando el driver una vez montado el sistema de archivos real. /etc/bluetooth/main.conf, que no existía: el adaptador se enciende solo al aparecer y lo ya emparejado se reconecta.- Se quita el bloqueo por software de rfkill al arrancar. Sin udev no lo hacía nadie, y un adaptador bloqueado es idéntico a no tener Bluetooth.
Juegos, Java y todo lo que usa X11
- XWayland se moría al arrancar porque
xkbcompno estaba en la imagen y no podía compilar su mapa de teclado. PeroDISPLAYseguía exportado, así que cualquier programa de X11 intentaba conectarse a un servidor que no existía y fallaba muchísimo después hablando de OpenGL. Minecraft era la víctima visible. Vanxkbcomp,xauthyxrandr. - 21 variables de entorno para que Firefox, Qt, GTK, SDL, Java y Electron usen Wayland en vez de caer a X11 sin decirlo.
Actualizaciones
- El paquete
mcoremetíam-sudosin su bit setuid. La primerampm upgradede cualquier sistema instalado habría dejado a quien la ejecutara sin poder ser root y sin poder desbloquear la pantalla — y arreglarlo necesitaba justo el sudo que se acababa de romper. - Le faltaban además doce utilidades que existían en la imagen y que ninguna
actualización podía tocar nunca. Las dos listas (imagen y paquete) son ahora
una sola:
build/mcore/utilidades.lista.
Otros
scphacia una máquina MIKE OS fallaba por falta desftp-server, y el error nombraba una ruta sin decir que lo que faltaba era un programa.- Opciones de kernel para estabilidad y ahorro: ACPI_SLEEP, hibernación, PCIEASPM, gobernador térmico, zswap, detectores de bloqueo.
- La web se publica en español e inglés, con tema claro y oscuro.
Comprobado
39 comprobaciones de humo y 11 de ratón real, todas en verde, sobre una máquina arrancada de verdad.