Noticias

Anuncios, novedades del proyecto y entradas del equipo BookOS.

Volver

El futuro de las apps de BookOS

Las apps de BookOS cambian por dentro: dejan de dibujarse con un motor web y pasan a dibujarse directamente en la GPU con GPUI, en Rust. Aquí contamos todo: por qué damos el paso, qué es GPUI, qué ya funciona, cómo está hecho, qué dicen los números, la hoja de ruta completa y qué implica para ti. --- ## En resumen | | Qué significa | |:--|:--| | **Qué cambia** | Las apps pasan de Tauri (Rust + HTML, CSS y JavaScript en WebKitGTK) a GPUI (todo en Rust, dibujado en la GPU) | | **Qué está listo** | Explorador 0.7 y Fuentes 0.1. El Explorador es también el selector de archivos de todo el sistema | | **Qué viene** | Una base de componentes común, `bookos-ui`, y después el resto de apps en cuatro fases | | **Qué no cambia** | Las apps se actualizan desde la BookOS Store y tus ajustes se quedan donde estaban | | **Qué aún no sabemos** | Cuánto mejoran el arranque, la memoria y la batería. Lo estamos midiendo | > [!TIP] > **En corto:** Tauri nos dio velocidad para crear. GPUI nos da velocidad para usar. --- ## De dónde venimos Durante el último año, BookOS ha construido su propio conjunto de aplicaciones. Casi todas comparten la misma receta: **Tauri 2**. | Área | Apps | |:-----|:-----| | Sistema | Ajustes, Shell, Monitor del sistema, Remap, BookOS Link | | Archivos | Explorador, Fuentes | | Productividad | Bloc de notas, Calculadora, Calendario, Reloj, Lumina | | Multimedia | Reproductor, Visor, Grabadora de voz, Cámara, Efectos de sonido | | Tienda | BookOS Store | Una app Tauri tiene dos mitades: - La **lógica** (leer carpetas, copiar archivos, hablar con el sistema) está escrita en **Rust**. - La **interfaz** es una pequeña página web en **HTML, CSS y JavaScript**, que muestra **WebKitGTK**, el motor web de GNOME. - Las dos mitades se hablan por **IPC**: la interfaz pide algo y Rust contesta con un mensaje **JSON**. Esa receta nos dio algo muy valioso: **velocidad para construir**. Con CSS se maqueta rápido, los tokens del sistema de diseño de BookOS (colores, radios, sombras, animaciones) se traducían directamente a variables CSS, y una sola persona podía levantar una app completa en días. > Tauri nos dio velocidad para crear. GPUI nos permite trabajar en la experiencia de uso. --- ## Por qué cambiamos Tauri fue la herramienta adecuada para construir. Para pulir, tiene cuatro costes que no se pueden optimizar desde dentro. ### Un motor web por ventana WebKitGTK se instala una sola vez en el disco, pero **cada ventana arranca su propio motor**: su intérprete de JavaScript, su motor de maquetación y sus procesos auxiliares. Para una calculadora, es mucho motor para muy poca calculadora. | Dónde se nota | Por qué | |:--|:--| | **Arranque** | Antes de ver nada, la ventana levanta el motor web y carga la página | | **Memoria** | Cada ventana abierta suma su propio motor | | **Sensación** | Una app que pinta primero un fondo vacío no se siente parte del sistema | ### Dos mundos que hablan por mensajes La interfaz y la lógica viven en lenguajes distintos. Cada dato que la interfaz quiere enseñar (una carpeta de 20.000 archivos, por ejemplo) se convierte a JSON en Rust, se envía y se vuelve a interpretar en JavaScript. Y cada regla de la app existe dos veces, una en cada lenguaje, sin un compilador que compruebe que coinciden. ### Lejos del escritorio BookOS tiene su propio escritorio, **`bookos-desktop`**: un compositor Wayland escrito en Rust que dibuja el panel, el dock y el Launchpad. Una app Tauri llega a él a través de GTK y WebKit, con dos capas por medio. ### Componentes copiados, no compartidos Los estilos y scripts comunes se copiaban de app en app. Un arreglo en uno había que repetirlo en todos, y con el tiempo las copias se separaban. > [!NOTE] > Nada de esto es un fallo de Tauri. Es el precio normal de meter un navegador en cada app, y para construir rápido mereció la pena pagarlo. --- ## Qué es GPUI GPUI es el framework de interfaz que nació dentro del editor **Zed**. Está escrito en Rust y pinta cada fotograma en la GPU, sin navegador de por medio. | | Antes (Tauri) | Ahora (GPUI) | |:--|:--|:--| | Lógica | Rust | Rust | | Puente | IPC con JSON | Llamada directa | | Interfaz | HTML + CSS + JS | Vista declarativa en Rust | | Pintado | WebKitGTK | GPU (wgpu sobre Vulkan) | | Ventanas | Wayland | Wayland + layer-shell | | Componentes | Copiados en cada app | Biblioteca común `bookos-ui` | Lo que cambia: - **Un solo lenguaje.** Lógica e interfaz en Rust: sin puente JSON entre dos mundos, sin estados que se desincronizan. - **Sin motor web por ventana.** Nada de WebKit cargándose en cada app. - **Listas que no pesan.** GPUI solo construye las filas que se ven: una carpeta con miles de archivos cuesta lo mismo que una con diez. - **Wayland nativo**, incluido layer-shell, el protocolo para paneles y superposiciones del escritorio. - **Integración directa con el escritorio**: las copias largas del Explorador ya aparecen en la **isla de actividades** de BookOS, con su botón de «Cancelar». ### Por qué GPUI y no otra opción | Opción | A favor | En contra, en nuestro caso | |:--|:--|:--| | **Seguir con Tauri** | Ya funciona; maquetar con CSS es rápido | Mantiene el motor web por ventana y el puente JSON | | **GTK 4** | Maduro, accesible, integrado en Linux | El aspecto lo dicta GTK; reproducir el diseño de BookOS es pelearse con su tema | | **Qt / QML** | Maduro, acelerado por GPU | La interfaz va en QML y C++: otra frontera entre lenguajes | | **iced** | Rust; ya lo usa `bookos-desktop` | En el escritorio dibuja en CPU; para apps con listas largas e imágenes preferimos GPU y listas virtuales ya probadas | | **GPUI** | Rust, GPU, probado en una app grande como Zed, estilos parecidos a CSS | Aún no ha llegado a la 1.0; sin campo de texto ni accesibilidad en Linux de serie | > [!NOTE] > Usamos una **copia propia de GPUI**, basada en el fork de Glass-HQ (commit `650aab5`). Ese fork dejó de compilar en Linux en marzo de 2026, así que lo arreglamos con un parche nuestro que también añade layer-shell. La mantenemos dentro del repositorio: **una actualización de fuera no llega a tu portátil sin que la hayamos probado antes.** --- ## Lo que ya funciona ### ![Icono del Explorador](/assets/img/gpui-explorer.png) Explorador · 0.7 La primera app grande reescrita en GPUI, y la que ha abierto camino a todas las demás. | Función | Qué hace | |:--|:--| | Lugares | Carpetas personales, discos montados y archivos recientes en la barra lateral | | Miniaturas | Imágenes y páginas PDF, reducidas al tamaño de la celda antes de subir a la GPU | | Vista rápida | Con vista previa de Markdown escrita desde cero | | Archivos | Copiar, mover, renombrar, papelera y propiedades | | Color por carpeta | Como en la versión anterior | | Abrir con… | La app adecuada para cada tipo de archivo | | Isla de actividades | Progreso de las copias largas, con «Cancelar» | | Selector de archivos | El diálogo de abrir y guardar de **todas** las apps de BookOS | ### ![Icono de Fuentes](/assets/img/gpui-fonts.png) Fuentes · 0.1 Una app nueva, nacida directamente en GPUI: ver, instalar y gestionar tipografías. Lee las fuentes con `ttf-parser`, que ya venía con GPUI, así que no añade peso. ### La base común: `bookos-ui` Todo lo que el Explorador tuvo que resolver por primera vez lo hemos sacado a una biblioteca que comparten todas las apps. Un arreglo ahí llega a todas en la siguiente compilación. | Pieza | Qué resuelve | |:--|:--| | Tema | Claro, oscuro y automático, con el color dinámico que Ajustes saca de tu fondo de pantalla | | Ventana | Barra de título, botones, esquinas y bordes para redimensionar | | Barra lateral | La de Ajustes, con buscador, plegable | | Controles | Interruptor, deslizador, desplegable, control segmentado y botones | | Campo de texto | GPUI no trae ninguno: es el que hicimos para el Explorador | | Menú y avisos | Menú contextual y avisos que se van solos | | Estado | Guardado en `~/.config/<app>/`, el mismo sitio que las versiones Tauri | | Iconos | Dentro del propio programa | ```chart tipo: barras titulo: Código Rust escrito para GPUI unidad: líneas Explorador: 11397 Fuentes: 3884 bookos-ui: 2206 ``` --- ## Cómo está hecho por dentro Para quien quiera el detalle técnico. ### La copia de GPUI GPUI todavía no ha llegado a la 1.0 y cambia a menudo de forma incompatible. Nuestro parche sobre el fork de Glass-HQ toca cuatro archivos: - `crates/gpui/src/platform/layer_shell.rs` - `crates/gpui_linux/src/linux/platform.rs` - `crates/gpui_linux/Cargo.toml` - `crates/gpui_wgpu/src/cosmic_text_system.rs` Todas las apps apuntan a **la misma copia, por ruta**. No es una preferencia: si dos partes del programa enlazan copias distintas de GPUI, no compila. GPUI se compila sin sus funciones por defecto, solo con Wayland y `font-kit`, sin X11. Las versiones finales se compilan con optimización completa en el enlazado (LTO), una sola unidad de código y sin símbolos de depuración. ### Integración con el escritorio | Pieza | Cómo funciona | |:--|:--| | **Selector de archivos** | El sistema de diseño de BookOS dice que el selector es siempre el Explorador. La versión GPUI cumple ese contrato: abrir, guardar, elegir carpeta, selección múltiple, filtros por tipo y título configurable | | **Isla de actividades** | Las copias largas se publican en la isla por D-Bus (`org.bookos.Desktop`), con progreso cada 500 ms y una acción de cancelar | | **Color dinámico** | Se lee de `~/.config/bookos/palette.json`, el mismo origen que el resto del sistema, y se recarga al volver a la ventana | ### La memoria está en la GPU Lo que más pesa en una app GPUI no es el código, sino lo que se sube a la tarjeta gráfica: los glifos del texto, las imágenes y el propio Vulkan. De ahí salen las reglas que siguen todas las apps: 1. **Iconos al tamaño en que se pintan.** GPUI rasteriza un SVG al tamaño que declara el archivo. Un icono que declara 504 px ocupa alrededor de 1 MB aunque se dibuje a 24. 2. **Imágenes reducidas antes de subir.** Las miniaturas del Explorador se decodifican en segundo plano y se reducen al tamaño exacto de la celda. El original de 4000×3000 se libera enseguida y nunca llega entero a la GPU. 3. **Listas virtuales.** Las listas largas solo construyen las filas visibles. 4. **Nada de un objeto por fila.** Los datos van en una lista simple y la vista pinta solo lo que se ve. 5. **Dependencias mínimas.** Si GPUI ya trae una biblioteca, como `ttf-parser` o `image`, se reutiliza. > [!TIP] > **La regla de oro:** nada sube a la GPU más grande de lo que se va a pintar. --- ## Seamos honestos con los números GPUI no es magia, y preferimos contarlo. ```chart tipo: barras titulo: Tamaño instalado de cada app unidad: MB Explorador Tauri 0.6.2: 6.1 Explorador GPUI 0.7: 26.2 Fuentes GPUI 0.1: 16.8 ``` > [!WARNING] > **El programa pesa más**, pero la comparación engaña. Una app Tauri parece pequeña porque se apoya en WebKitGTK, que vive aparte en el sistema. GPUI lo lleva todo dentro. Esto es lo que hay detrás de esos 6,1 MB del Explorador Tauri: ```chart tipo: barras titulo: Lo que necesita una app Tauri para funcionar unidad: MB Explorador Tauri: 6.1 WebKitGTK 4.1: 100.3 JavaScriptCore: 35.3 ``` Esos 135 MB de WebKitGTK y su motor de JavaScript se comparten entre todas las apps Tauri, así que tampoco se le pueden cargar enteros a una sola. Por eso el tamaño en disco **no dice cuál gasta más**. Y mientras quede una sola app en Tauri, WebKitGTK tiene que seguir instalado. ### Lo que vamos a medir Compararemos la versión Tauri y la GPUI de la misma app en un Galaxy Book5 Pro con BookOS 0.7, perfil de energía equilibrado, sin red y sin otras apps abiertas: | Medida | Cómo | Repeticiones | |:--|:--|:--| | **Arranque en frío** | Desde que se lanza hasta el primer fotograma con contenido, con la caché vacía | 20 | | **Arranque en caliente** | Lo mismo, sin vaciar la caché | 20 | | **Memoria** | Suma de todos los procesos de la app, en reposo y con una carpeta de 10.000 archivos | 10 | | **Batería** | Descarga en 30 minutos con un guion de uso fijo | 3 | > [!IMPORTANT] > **Publicaremos las cifras cuando sean fiables, no antes**: la mediana de cada medida, el guion de uso y los datos en bruto. Y las publicaremos aunque alguna no salga a nuestro favor. --- ## Hoja de ruta ```roadmap titulo: El camino hacia un ecosistema nativo - [x] Explorador y Fuentes | Completado | Versiones 0.7 y 0.1 · Interfaz en GPUI y selector nativo de archivos - [>] Base compartida | En curso | Temas, tipografía, iconos, entradas de texto y componentes para todas las apps - [ ] Apps de uso diario | Planificado | Calculadora, Reloj y Bloc de notas · Poca lógica y mucho uso diario - [ ] Multimedia | Planificado | Visor, Reproductor y Grabadora · Interfaces dibujadas directamente en la GPU - [ ] Núcleo del sistema | Planificado | Ajustes y BookOS Store · Migración cuidada de las apps más complejas ``` Tres reglas para leerla: - **Fases, no fechas.** Cada app tarda lo que tarde en igualar a su versión anterior. Anunciaremos en el blog el cierre de cada fase. - **El orden puede cambiar** si la comunidad lo pide o si una app resulta más sencilla de lo previsto. - **Ninguna app pasa a GPUI** hasta que su nueva versión hace todo lo que hacía la anterior. ### Por qué este orden 1. Primero, una app que **obligue a resolver todos los problemas nuevos**. El Explorador lo tenía todo: listas enormes, imágenes, texto, menús y diálogos. 2. Después, **sacar esas soluciones a una biblioteca común**, para no resolverlas dos veces. 3. Luego, apps **sencillas y muy usadas**, donde la mejora se nota enseguida y el riesgo es bajo. 4. Más tarde, **multimedia**, que necesita piezas propias: audio, imágenes grandes y controles multimedia del sistema. 5. Al final, **Ajustes y la Store**: las más complejas, y las que más daño harían si fallan. ```chart tipo: donut titulo: Apps por fase Ya en GPUI: 2 Uso diario: 3 Multimedia: 3 Núcleo del sistema: 2 Sin fase todavía: 8 ``` ### Fase 1 · Explorador y Fuentes — completada Demostrar que una app grande de BookOS puede vivir en GPUI sin perder funciones. Lo que aprendimos: GPUI no trae campo de texto y hubo que escribir uno; la memoria está en la GPU y no en el código; y el fork no compilaba en Linux, así que lo parcheamos y fijamos la versión. **Qué notas tú:** el Explorador nuevo, y que el diálogo de abrir y guardar de las demás apps es el propio Explorador. ### Fase 2 · Base compartida — en curso Que migrar una app sea, sobre todo, escribir su lógica, no reconstruir botones. Ya están el tema, la ventana, la barra lateral, los controles, el campo de texto, el menú, los avisos, el estado y los iconos. Falta: - Que el Explorador y Fuentes usen `bookos-ui` en lugar de sus propias copias. - Diálogos comunes: confirmar y avisar de un error. - Un plan de accesibilidad. **Se cierra cuando** una app de prueba hecha solo con `bookos-ui` cumple el checklist del sistema de diseño en tema claro y oscuro. ### Fase 3 · Apps de uso diario — planificada | Apps | Por qué ahora | Retos | |:--|:--|:--| | Calculadora, Reloj, Bloc de notas | Poca lógica y mucho uso: un arranque más rápido se nota enseguida | Un editor de varias líneas para el Bloc de notas; alarmas y temporizadores fiables para el Reloj | **Se cierra cuando** las tres igualan a su versión Tauri y hemos publicado sus medidas de arranque y memoria. ### Fase 4 · Multimedia — planificada | Apps | Por qué ahora | Retos | |:--|:--|:--| | Visor, Reproductor, Grabadora de voz | Es donde más se aprovecha la GPU: imágenes grandes, carátulas, formas de onda | Imágenes grandes sin disparar la memoria, controles multimedia del sistema (MPRIS) y grabación sin cortes | **Se cierra cuando** igualan a sus versiones Tauri en los formatos que ya soportaban y el consumo al reproducir no es peor. ### Fase 5 · Núcleo del sistema — planificada | Apps | Por qué al final | Retos | |:--|:--|:--| | Ajustes, BookOS Store | Ajustes toca red, Bluetooth, pantalla, sonido y el color de todo el sistema. La Store instala y actualiza todo lo demás | Muchas pantallas, mucha integración y ningún margen para que una actualización falle | > [!CAUTION] > **Ajustes no puede dejar fuera a quien usa un lector de pantalla.** Esta fase no empieza hasta que la accesibilidad esté resuelta o tenga un plan claro. **Se cierra cuando** Ajustes y la Store igualan a sus versiones Tauri, pasan un periodo de prueba abierto a la comunidad y la Store se ha actualizado a sí misma con éxito en GPUI. ### Apps sin fase todavía Siguen en Tauri y recibirán fase cuando la base compartida esté cerrada. Mientras tanto, siguen recibiendo correcciones como hasta ahora. | Área | Apps | |:--|:--| | Sistema | Shell, Monitor del sistema, Remap, BookOS Link | | Productividad | Calendario, Lumina | | Multimedia | Cámara, Efectos de sonido | > [!IMPORTANT] > **Sin prisas y sin cortes:** cada app sigue en Tauri hasta que su versión GPUI la iguala. Nunca vas a perder funciones por el cambio. --- ## Qué implica ### Para ti, que usas BookOS - Apps que **aparecen antes** y responden sin tirones: es el objetivo, y lo confirmaremos midiendo antes de darlo por hecho. - **Un mismo aspecto** en todo el sistema: mismos colores, radios, tipografía y animaciones. - **Más integración con el escritorio**: isla de actividades, un selector de archivos común y colores dinámicos. - **Actualizaciones como siempre**, desde la **BookOS Store**. - **Tus datos se quedan donde estaban**: las versiones GPUI leen la configuración en las mismas rutas. ### Lo que puede notarse durante la transición | Qué | Por qué | |:--|:--| | Pequeñas diferencias entre apps | Durante un tiempo conviven apps Tauri y apps GPUI | | Detalles por pulir en una app recién migrada | Es código nuevo, aunque iguale en funciones a la anterior | | Paquetes más grandes | El motor de dibujo va dentro de cada programa | ### Para quien construye BookOS - **Un solo lenguaje.** No hay frontend aparte ni comandos IPC que mantener sincronizados. - **Hay que construir lo que el navegador regalaba**: campos de texto, menús, desplazamiento, selección. Se hace una vez, en `bookos-ui`. - **Compilaciones más largas**, a cambio de que el compilador pille muchos fallos antes de ejecutar nada. - Hay una **plantilla** con una app mínima que usa todos los componentes, lista para copiar. --- ## Riesgos y cómo los gestionamos | Riesgo | Qué hacemos | |:-------|:------------| | GPUI no ha llegado a la 1.0 y su fork puede cambiar o abandonarse | Copia propia en el repositorio; actualizamos solo cuando lo decidimos y tras probarlo | | Perder funciones al reescribir | Ninguna app cambia hasta igualar a la anterior | | Accesibilidad: nuestra copia de GPUI aún no expone la interfaz a lectores de pantalla en Linux | Trabajo pendiente explícito y requisito antes de migrar Ajustes y la Store | | Programas más grandes en disco | Lo explicamos con contexto y medimos lo que importa: memoria, arranque y batería | | Equipos sin Vulkan | GPUI dibuja con Vulkan; BookOS está pensado para el Galaxy Book, que lo soporta | > [!CAUTION] > **La accesibilidad es la deuda más seria de este cambio.** WebKitGTK sí expone la interfaz a los lectores de pantalla. No vamos a migrar las apps del núcleo del sistema sin resolverlo antes. --- ## Preguntas frecuentes ### ¿Tengo que hacer algo? No. Las nuevas versiones llegan por la BookOS Store como cualquier otra actualización. ### ¿Perderé mis ajustes o mis datos? No. Las versiones GPUI guardan su estado en la misma carpeta (`~/.config/<app>/`) que las versiones Tauri. ### ¿Por qué el Explorador nuevo ocupa más? Porque lleva su motor de dibujo dentro. La versión anterior también lo necesitaba, pero lo tomaba de WebKitGTK, instalado aparte. ### ¿Desaparecerá WebKitGTK del sistema? Mientras quede una sola app en Tauri, no. Al terminar todas las fases revisaremos si alguna otra pieza de BookOS lo sigue necesitando antes de decidir nada. ### ¿Hay fechas? Todavía no. Preferimos no prometer fechas que luego habría que mover. Avisaremos en el blog al cerrar cada fase. ### ¿Funcionará en mi equipo si no es un Galaxy Book? GPUI necesita una tarjeta gráfica con Vulkan. BookOS está pensado y probado para el Galaxy Book; en otros equipos con Vulkan debería funcionar, pero no es nuestro objetivo hoy. --- ## Participa Si quieres probar las versiones GPUI antes que nadie o contarnos qué app debería ir primero, pásate por la [comunidad](/community.html). Y si algo falla, cuéntanoslo: es la forma más rápida de que llegue bien a todo el mundo. **El futuro de BookOS se escribe en Rust. Y se pinta en la GPU.** --- ## Referencias - Zed Industries. *GPUI*, el framework de interfaz del editor Zed. [github.com/zed-industries/zed](https://github.com/zed-industries/zed) - Glass-HQ. *Fork independiente de GPUI*, commit `650aab5`. - *Tauri 2*. [tauri.app](https://tauri.app) - *WebKitGTK*. [webkitgtk.org](https://webkitgtk.org) - *wgpu*. [wgpu.rs](https://wgpu.rs) - *Smithay*, la biblioteca sobre la que está hecho `bookos-desktop`. [github.com/Smithay/smithay](https://github.com/Smithay/smithay) - *wlr-layer-shell*, el protocolo de superficies del escritorio. [wayland.app/protocols/wlr-layer-shell-unstable-v1](https://wayland.app/protocols/wlr-layer-shell-unstable-v1)