Soy programador, instalé ElementaryOS y te cuento mi experiencia
Desde que salió le he tenido un cariño especial a ElementaryOS, esa distro de Linux basada en Ubuntu que se caracteriza por tener un diseño muy cuidado. Son varias las veces que lo he instalado pero siempre he vuelto a Windows particularmente por las aplicaciones que no se pueden ejecutar en Linux.
En mi día a día programo en VBA de Microsoft Access para un Proyecto de punto de venta que tengo funcionando. De a pedazos lo he estado migrando a Web con un proyecto alterno que usa la misma base de datos para lograr la interoperabilidad.
Sobre ElementaryOS
ElementaryOS es un sistema ya muy maduro y estable. Al estar basado en Ubuntu tiene mucho soporte y aplicaciones compatibles. Sobre su diseño; solo puedo hablar maravillas. Me hace sentir muy cómodo y me gusta mucho la velocidad con la que funciona.
Si de algo me puedo quejar es que muchas aplicaciones muy conocidas no están en su tienda y de que tras hibernar y volver, la pantalla parpadea varias veces y luego se acomoda.
La velocidad es buenísima. Hasta el momento no tengo ninguna queja. A propósito, tengo una Laptop Lenovo ThinkPad T580. Esta vez no tuve absolutamente ningún problema con Driver alguno ni con la pantalla secundaria que solía ser común en versiones anteriores.
Sobre lo técnico
Al ser Ubuntu, como dije, casi todo es compatible y hay muchísimos recursos para aprender. StackOverflow está lleno de consultas sobre Ubuntu y ChatGPT no se diga, se defiende superbien con esto.
Docker se instala sin problemas y apartir de aquí se abre un mundo de posibilidades porque puedes instalar casi cualquier cosa.
Las impresoras que he conectado hasta el momento se han instalado sin problemas. Su asistente de instalación es muy bueno. Como bonus, trae ya configurado CUPS que es un servidor de impresión que además de controlar la cola de impresión, permite compartir por la red tus impresoras. Incluso las puede compartir con Windows (ya iré a ellos más adelante).
Tuve problemas con FreeRDP. Se instala perfecto pero para el caso de uso que quería hubo que clonar el repositorio, instalar las dependencias y compilar a mano para luego instalarlo. Por cierto, fue algo que nunca había hecho. Todo para llegar al siguiente punto.
Visual Studio Code al ser multiplataforma funciona muy bien.
Ejecutar aplicaciones de Windows en ElementaryOS
Por ahí me encontré con que es posible instalar “cualquier” aplicación de Windows en Ubuntu/ElementaryOS. Sé que existe Wine que hace su mejor esfuerzo por portar las API’s de Windows a Linux y sé que le ha ido muy bien. Para este caso particular, me centraré en WinApps.
El mod se llama WinApps. Es básicamente Windows 11 Tiny instalado en Docker al que se accede inicialmente por el navegador para terminar de instalarlo. Una vez hecho esto puedes acceder a él mediante FreeRDP, configurar tus aplicaciones y luego ejecutar el setup.sh
de WinApps para que “escanee” tu Windows y te permita seleccionar las aplicaciones que quieras traer a Elementary.
En mi caso, instalé Microsoft Access 2010 completo y JW Library una aplicación UWP (que no es un .exe sino una App de Windows 11). Luego el Script me configuró el acceso desde ElementaryOS y aparece en el menú de aplicaciones.
En términos simples, lo que hace es que mediante FreeRDP se conecta a Windows pero solo muestra la aplicación configurada, por lo que “parece” que la aplicación está instalada en Elementary. Las ventanas se pueden redimensionar pero con lentitud, comparten acceso al portapapeles y “dentro de Windows” puedes acceder a la carpeta de tu usuario de ElementaryOS que se configura como una carpeta compartida. La verdad es que está superbien logrado pero de vez en cuando puede generar algún problema. De todas formas le pongo un 10 de 10.
”Windows” también se instala como una aplicación más en el menú de aplicaciones y al abrirlo tienes en una Ventana a Windows (valga la redundancia). Creo que hasta funciona mejor que Microsoft RDP. Por cierto, FreeRDP es una implementación del protocolo RDP de Microsoft.
Acceso a los puertos USB
Hasta ahora, no he podido compartir los puertos USB con Windows en Docker. Intenté la siguiente configuración en el compose.yml
de el contenedor de Windows:
services:
windows:
privileged: true
devices:
- /dev/bus/usb:/dev/bus/usb
Pero hasta ahora no ha funcionado. Quizá haya que hacer: sudo chown root:root -R /dev/bus/usb/
y sudo chmod -R 755 /dev/bus/usb/
pero no he querido hacerlo por temor a que truene algo (jaja hace unos días troné todo por cambiar el propietario de /var/ al usuario www-data, pa rápido mejor reinstalé ElementaryOS)
Supongo que si conecto un lector de código de barras no funcionará. Supongo, porque en realidad funciona como un Teclado. Así que es probable que FreeRDP lo interprete como pulsaciones de teclas.
De todas formas puedes compartir tu impresora de ElementaryOS con Windows mediante CUPS, que levanta un WebService en localhost:361
para tal fin.
Programar para Windows desde Linux (ElementaryOS)
Creo que usar Windows con Docker es la mejor manera de programar para Windows desde Linux. Salvo que la App sea multiplataforma o web.
Como comenté, tengo un proyecto programado en VBA de MS Access, se conecta a una base de datos de MS SQL Server. Esta ha sido la principal traba pero por cuestiones de requerimientos. Usando FreeRDP a un Windows dockerizado puedo continuar programando en él.
MS Access 2010 funciona desde Windows en Docker. La base de datos en otro contenedor de Docker que tiene MSSQL Server.
Hay módulos que ya funcionan desde una versión Web programada en Python con Django. Ambos trabajan directamente sobre la misma base de datos y así tienen compatibilidad.
De hecho, las consultas SQL son archivos de texto SQL
que leen ambos proyectos, por lo que solo programo una vez las consultas y ambos proyectos las usan.
Cada app de Django tiene sus propias querys.
Al proyecto de MS Access le especifico la ruta base de las Querys. En mi caso \\tsclient\home\Proyectos\FW\apps
. Para luego importar una por una.
La función Query_Add
escribe el contenido de la Query en una función de VBA que si está en modo de desarrollo, la ejecuta directamente desde el archivo .sql, si no, lo ejecuta desde la función:
Mucho relajo solo para programar en Windows desde Linux
Pues sí, pero el punto es probar que se puede. Cosa que en años pasados no era posible sin ejecutar Windows desde una PC virtualizada, aunque en funcionalidad Docker y PC Virtualizada sea lo mismo. Como mencioné, Linux ha madurado mucho, hay mucha menos problemas con el hardware y se ha vuelto realmente cómodo. Me sorprendió que los drivers de las impresoras funcionaran sin problema. Y Windows en Docker, funciona super bien.
No deja de ser un experimento. Realista, pero experimento al fin. Cualquier cosa en que te pueda ayudar, me tienes en X.