Linux, ¿la plataforma de desarrollo software del futuro?

Últimamente, muchos desarrolladores están cuestionándose en qué plataforma realizar sus proyectos (véase aquí). La razón puede ser el revuelo que está ocasionando la consolidación de Linux, el crecimiento en usuarios de Mac, el fracaso de Windows Vista...Cada día más desarrolladores enfocan el desarrollo hacia un software multiplataforma. Todo esto me ha incitado a escribir este artículo donde pretendo expresar de la forma más objetiva posible qué plataforma (tanto Sistema Operativo como de programación) son las que pueden triunfar.

Por motivos de sencillez, he elegido Windows, Linux, Macintosh y Solaris como Sistemas Operativos, además de ser los más populares. Además, personalmente creo que son las plataformas más aptas para desempeñar esta importante tarea.

Windows
Windows no solo es el sistema operativo más usado, sino que también es el que más desarrolladores y software tiene. Es todo un gigante entre los sistemas operativos, un emperador si lo queréis ver así. Pero por supuesto, eso no significa que sea el mejor sistema operativo (SO). Opiniones personales aparte, Windows es una muy buena plataforma para distribuir tu software porque el número de clientes potenciales es realmente elevado (En torno al 93% (datos de Mayo de 2007) de los ordenadores de todo el mundo usan Windows). Por lo tanto, es una plataforma que aunque no nos guste (a los linuxeros), hemos de tener muy en cuenta.

Además, Microsoft ha creado una plataforma realmente muy buena para programar, todo hay que decirlo. Hablo de .NET. Negar que es muy buena, es engañarse a un mismo. Existe un port (Mono) de .NET para Linux,Mac, Solaris y más SO's basados en UNIX gracias a que Microsoft liberó el código (parcialmente).



La plataforma .NET es realmente muy buena porque es capaz de abstraer gran cantidad de lenguajes (C#, Visual Basic, Delphi (Object Pascal), C++, J#, Perl, Python, Fortran y Cobol.NET). Además dispones de muy buena documentación en msdn. Ahora bien, la gran pega que tiene es que sólo el núcleo de .NET fue lo que liberó Microsoft. Es decir, que uno puede hacer un programa para consola que sea totalmente multiplataforma. El problema es que se supone que nosotros queremos hacer un programa que no solo sea multiplataforma sino que también sea accesible para muchos usuarios, así que tendremos que usar GUI's. Y aquí está el problema. Microsoft no quiere/interesa liberar esta parte de .NET porque supondría liberar buena parte de Windows. Entonces, proyectos como Mono tienen que usar GTK# para dibujar las GUI's. Ventaja, que estas si que son libres y multiplataforma. Inconvenientes, que no están todo lo bien documentadas que uno querría. Y no solo eso, sino que además siempre que uno desarrolle en .NET bajo Mono, irá por detrás de Microsoft. Pese a eso, es una muy buena alternativa.

Además de .NET, otras plataformas muy buenas para Windows son Java (Swing para las GUI's), Gtk/Gtk+ (C/C++) y Qt4 (C++).


GNU/Linux
Linux es un SO que está viviendo sus mejores momentos desde que fuera creado en 1991. El que este sistema operativo venga preinstalado en computadoras de DELL y Lenovo (Asia) está ayudando muy positivamente a que se consolide como un gran competidor a Windows. Además, es muy estable, gratuito (si no se compra versiones de pago) y libre. Linux se está convirtiendo en una perfecta plataforma para programar, véase .NET (gracias a Mono) , Java y Gtk/Gtk+ o Qt(sobre todo gracias a su última versión, Qt4 como ya hablamos con anterioridad en el blog). Y es que personalmete, como usuario de KDE, creo que Qt4 es una plataforma ideal, no solo por la eficiencia sino por el soporte de bindings para Java y C#. Además, esta última revisión ha mejorado de forma muy notable la potencia en gráficos (además de estar muy bien documentada). No puedo hablar igual de Gtk (lo siento para los Gnomeros).

Java sigue siendo el líder de los lenguajes al ser el más usuado. Y en Linux no iba a ser menos. Java por supuesto que también es una muy buena alternativa multiplataforma, ya no solo por estar muy instaurado sino porque la documentación es buena y sus bibliotecas muy completas. Eso sí, el inconveniente que plantea es la eficiencia. Pero sí que es una opción muy buena desarrollar software multiplataforma.

Macintosh

El sistema operativo de la manzana está viviendo unos momentos dorados. Y eso también se nota en que cada vez hay más aplicaciones para Mac OS X. Lógicamente esto también se nota en el interés mayor por parte de los desarrolladores. Por eso, también analizaré este sistema operativo como plataforma para desarrollo software. Las ventajas que aporta respecto a Windows es una robusted mucho mayor. Ahora bien, también es un sistema de pago (como Windows) con la pega de que a día de hoy sólo funciona "oficialmente" bajo hardware de Apple. No sabemos si con Mac OS X 10.5 Leopard, Apple permitirá su instalación en todos los x86, aunque con casi toda seguridad no.

Con la nueva versión de Qt4, ya no hay problema para usar estas librerías en Macintosh (al igual que en Windows). También puedes usar Gtk, pero como dije antes, no las considero una alternativa real puesto que para desarrollar software serio hay que convencer a muchos desarrolladores, y eso se hace con una API potente y bien documentada. .NET está disponible gracias a Mono. Por supuesto que Java también, pero aquí sí que hay un problema. Apple se encarga de revisar/optimizar Java para Mac, por lo que en Macintosh, la versión oficial es la 1.5 (en Windows, Linux y Solaris la versión actual es 1.6).


Solaris

Finalmente hablaremos de Solaris, el sistema de Sun. Ya en 2005 fue liberado su código fuente. Sun está haciendo grandes esfuerzos para robarle terreno a Linux y afianzar la posición de Solaris. Las grandes ventajas que aporta este sistema operativo frente a Linux es que Java es el núcleo de todo. Está perfectamente integrado este lenguaje en el sistema. Por supuesto que podemos programar también en .NET, en C++ con QT y también con Gtk.

El problema que le encuentro a Solaris es que aunque se están haciendo grandes esfuerzos en aumentar el soporte hardware, todavía falta tiempo para que el número de drivers sea más grande.

Conclusión
Después de este análisis de los diferentes sistemas operativos, he de destacar algo que hasta ahora no había tenido en cuenta. La virtualización. Tanto Windows, como Linux, Mac y Solaris disponen de software de virtualización de sistemas operativos. Así que en esta parcela no se decidirá qué sistema es mejor para convertirse en la plataforma de desarrollo software del futuro.

Personalmente, yo me decantaría por Linux si se trabaja bajo un hardware probado (como los PC's de DELL). ¿Las razones? Seguridad, robusted, gran variedad de bibliotecas de programación multiplataforma. Probablemente sea la plataforma del futuro. Ahora bien, si se pretende programa exclusivamente en Java no olvidaría a Solaris. Las razones por las cuáles no opto por Windows y Mac creo que son previsibles. Sistemas de pago, cerrados y que a día de hoy aportan poco más de lo que disponemos en la comunidad Open Source.

Y aconsejo, pónganse las pilas con Qt4, que va a seguramente va a dar mucho de qué hablar. Y vosotros, ¿qué haríais?

He de agradecer de forma notoria a mi amigo Antonio, porque sino fuera por las largas discusiones que he tenido con él sobre temas como éste, quizás no me hubiera ni cuestionado escribir este humilde artículo de opinión de un pobrecito hablador ( ;) ).

18 comentarios:

  programador

26 de agosto de 2007, 13:15

Pues muchas gracias. Llevo ya unos años dándole vueltas qué alternativa tomar para el vb6, y me refuerzas en mi idea de Qt.

  Huelva Paraiso del Friki

26 de agosto de 2007, 13:21

Bueno, tengo que decir que con respecto al GUI Windows Form está casi terminado el port para mono, el uso de GTK# está ahí por razones históricas.

Por lo demás un artículo excelente.

  Kilian

26 de agosto de 2007, 14:04

Ya que hablas de virtualización: un Mac con Mac OS X es el único equipo que te permite correr software en los 4 sistemas operativos que hablas. Mac OS X en la máquina host y el resto de SOs en máquinas virtuales, corriendo en VMWare Fusion o Parallels.

Aunque con algunos hacks puedes correr OSX en un x86 standard, hay que recordar que oficialmente solo está soportado en el hardware de Apple.

La inversión inicial en el Mac vale la pena. Sobretodo si lo orientas al desarrollo multi-plataforma.

  Javier Navarro

26 de agosto de 2007, 15:05

El artículo es muy interesante, pero creo que en poco tiempo el sistema operativo no será la plataforma de ejecución de las aplicaciones más importantes, sino el navegador web.

Ya usamos diariamente muchas aplicaciones que corren sobre web y que están sustituyendo a las aplicaciones clásicas de escritorio. En este sentido creo que Google está haciendo una importante aportación, dando ideas, herramientas de desarrollo y soporte (véanse las APIS de Google o Google Gears, por ejemplo).

En poco tiempo no importará el SO, tan sólo hará falta tener una conexión a Internet y un navegador para ejecutar nuestras aplicaciones diarias. Y estos desarrollos sí son realmente multiplataforma para el usuario.

Por ello, creo que la plataforma de desarrollo sofware del futuro será la que permita desarrollar más cómodamente aplicaciones web. Habría que hablar de servidores web, entornos de desarrollo y librerías, pero esto daría para otro artículo :-)

  Alginros

27 de agosto de 2007, 9:40

Estoy parcialmente de acuerdo contigo, Javier Navarro. Es cierto que muchas aplicaciones se están portando a la web, pero hay otras que bajo mi punto de vista no tiene ningún sentido portarlas. Y aquí es donde entra las plataformas de desarrollo. Qué sentido tiene desarrollar una aplicación vía servicios web? Bajo mi punto de vista ninguna. Porque todo lo que genera son problemas. Al ser un entorno web, no sé dónde vas a compilar el proyecto. Al ser un entorno web, tienes que tener un navegador y sobre ese navegador correr el "IDE web" (por llamarlo de algún modo). Y encima, el entorno web tiene que correr también bajo un sistema operativo.

Creo que das demasiada importancia a las aplicaciones web. Yo creo que hay aplicaciones que tienen mucho sentido estar en la web (véase Google Maps, noticias, etc) y hay otras que no lo tienen. Simplemente así de sencillo. Ni las aplicaciones web tienen que robar terreno a las aplicaciones de escritorio y viceversa.

  Txus

27 de agosto de 2007, 10:48

Solamente un pequeño comentario. .NET como tal no tiene ports porque Microsoft liberó el código, sino que .NET es una implementación un estándar ECMA.:
http://es.wikipedia.org/wiki/.NET
http://es.wikipedia.org/wiki/Proyecto_Mono

  Crispin

27 de agosto de 2007, 12:13

¿QT no tiene una liciencia restrictiva en caso de que quieras vender tu código?

Que yo sepa no es gratuito.

  Alginros

27 de agosto de 2007, 14:20

Mira, según el último relicenciamiento de Qt4, ya es posible distribuir el código bajo licencias libres no tan restrictivas como la GPL. Aquí.

  Crispin

27 de agosto de 2007, 16:23

No me importa distribuirlo como GPL, lo que quiero saber es si tengo que pagar a trolltech por hacer un programa comercial:

http://trolltech.com/products/qt/licenses/licensing

"The Qt Commercial License is the correct license to use for the development of proprietary, commercial software with Qt or Qt Jambi. The commercial license allows you to:

* Develop commercial software and software whose source code you wish to keep private."

  Alginros

27 de agosto de 2007, 17:20

Tengo entendido que si distribuyes tu software bajo una licencia libre no tienes por qué comprar la licencia a Trolltech. De todos modos, si tienes más interés, contacta con Trolltech. Ellos te lo aclararán.

  Cheli

28 de agosto de 2007, 0:06

Hay varias cosas imprecisas como la que ya te han corregido de que se liberó el código de .net pero por lo general es un buen artículo, enhorabuena.

  ALejandro Gamboa

28 de agosto de 2007, 0:44

bueno en realidad yo creo como javier navarro que el futuro esta en la web y que todos los sistemas estan poco a poco migrando a la web , una prueba de esto es el framework de Adobe "Flex2" con este puedes crear aplicaciones tipo escritorio que corren en Flash, tambien NET se inclina hacia el mismo rumbo con su nueva Tecnologia llamada "SilverLight" que es algo asi como el nemesis de Flex.

  Antonio

28 de agosto de 2007, 1:13

Alginros, te felicito por el estupendo artículo que has escrito, muy completo y muy bien argumentado ;-)

En mi opinión es indiscutible que Linux será la plataforma de desarrollo del futuro. Si esto no ha ocurrido ya ha sido por la falta de una plataforma de desarrollo productiva (más allá de C++) que se rija por una licencia del gusto de la comunidad Open Source. ¿Cuál puede ser esta plataforma? desde mi punto de vista (y aunque también se usen C++, FreePascal o Python) las papeletas se reparten entre Mono y Java:

- Mono puede heredar una gran parte de los desarrolladores de .NET en Windows, es un proyecto bastante maduro liderado por alguien tan representativo como Miguel de Icaza y con el gran respaldo de una empresa tan potente como Novell, y la licencia es GPL. El principal problema de esta plataforma es, como dices, ir siempre a la cola de su contrapartida Windows.

-Java: Es una plataforma muy madura que está completamente soportada en Linux, cuenta con un elevadísimo número de desarrolladores y que está respaldada por una empresa como Sun que en los últimos tiempos está realizando aproximaciones estratégicas realmente importantes hacia posiciones Open Source. Desde mi punto de vista, si Java apuesta por Linux lo suficiente, Linux apostará por Java en la misma medida.

En cualquier caso, no me cabe duda de que los desarrollos que se hagan en Linux en el futuro serán realizados, en general (como ya ocurre), con vistas a su portabilidad a otras plataformas (no sólo Linux). Para construir las GUIs se utilizarán bindings a Qt y GTK.

  Anónimo

28 de agosto de 2007, 16:22

Yo creo que el Sistema Operativo no es problema, sino el lenguaje que se escoja para hacer las aplicaciones.

Para mi el lenguaje debe permitir que el mismo codigo generado se ejecute de la misma forma en cualquier Sistema Operativo y en cualquier Arquitectura.

Por eso creo que el futuro esta en los lenguajes interpretados como Java, Python y otros Scripts.

Sin embargo encuentro que muy pocas aplicaciones hechas en Java funcionan de igual forma sobre cualquier Sistema Operativo y menos sobre cualquier Arquitectura.

No se si se deba a la programacion, o a que al compilarlo (bit code) elimina esta particularidad de ser multiplataforma.

Pero tomando como base un software en Java muy difundido como el netbeans, no pude hacer correr la version de Linux en Windows y visceversa.

En cambio muchas apliaciones hechas en Python corren perfectamente en WIndows, Linux y Mac, por lo que creo que un lenguaje donde te ahorres escribiendo codigo, puedas seudo compilar para proteger el codigo y que se pueda ejecutar igual en cualquier plataforma es lo que se necesita.

En cuanto a la velocidad de procesamiento, puedo pensar que de aqui a 10 años, los procesadores abran superado los 10 Ghz y ya las aplicaciones de python no tendran una lentitud apreciable por el usuario.

Por eso muchas personas volcan sus esfuerzos a la web, porque en la web no importa el SO, el resultado es el mismo, sin embargo, esto es cada vez mas dificil con las aplicaciones que queremos pasar a la web.

Aun no sale el Office java que se prometio en 1998 y que seria mas poderoso que Staroffice y corriendo en cualquier navegador, y en cualquier plataforma.

El futuro estaria en lenguajes como Python que puedan interactuar con GUIS como GTK, QT, WX, TK, muy compatibles en cualquier Arquitectura y Sistema Operativo.

  Anónimo

28 de agosto de 2007, 16:23

Yo creo que el Sistema Operativo no es problema, sino el lenguaje que se escoja para hacer las aplicaciones.

Para mi el lenguaje debe permitir que el mismo codigo generado se ejecute de la misma forma en cualquier Sistema Operativo y en cualquier Arquitectura.

Por eso creo que el futuro esta en los lenguajes interpretados como Java, Python y otros Scripts.

Sin embargo encuentro que muy pocas aplicaciones hechas en Java funcionan de igual forma sobre cualquier Sistema Operativo y menos sobre cualquier Arquitectura.

No se si se deba a la programacion, o a que al compilarlo (bit code) elimina esta particularidad de ser multiplataforma.

Pero tomando como base un software en Java muy difundido como el netbeans, no pude hacer correr la version de Linux en Windows y visceversa.

En cambio muchas apliaciones hechas en Python corren perfectamente en WIndows, Linux y Mac, por lo que creo que un lenguaje donde te ahorres escribiendo codigo, puedas seudo compilar para proteger el codigo y que se pueda ejecutar igual en cualquier plataforma es lo que se necesita.

En cuanto a la velocidad de procesamiento, puedo pensar que de aqui a 10 años, los procesadores abran superado los 10 Ghz y ya las aplicaciones de python no tendran una lentitud apreciable por el usuario.

Por eso muchas personas volcan sus esfuerzos a la web, porque en la web no importa el SO, el resultado es el mismo, sin embargo, esto es cada vez mas dificil con las aplicaciones que queremos pasar a la web.

Aun no sale el Office java que se prometio en 1998 y que seria mas poderoso que Staroffice y corriendo en cualquier navegador, y en cualquier plataforma.

El futuro estaria en lenguajes como Python que puedan interactuar con GUIS como GTK, QT, WX, TK, muy compatibles en cualquier Arquitectura y Sistema Operativo.

Rodrigo Carvajal Soler
rodcarsol@hotmail.com

  Alginros

28 de agosto de 2007, 16:38

Tu opinión es muy válida, aunque discrepo en que los lenguajes interpretados sean el futuro. De todos modos me parecen buenas alternativas, ;)

En lo que discrepo y mucho es en la velocidad de procesador. 10GHz??? Pues a menos que cambien la tecnología de integración, nada de nada. El por qué? Bien sencillo. A partir de los 4GHz, con la tecnología que se dispone hoy en día, el procesador alcanza los 100-120ºC, una temperatura crítica, mortífera para la máquina. Las únicas alternativas están en un mejor aprovechamiento del número de ciclos. Olvídate en la frecuencia, está acabada (solo tienes que ver que desde hace 5-6 años ya no se cumple la "famosa" Ley de Moore).

  Javier Navarro

28 de agosto de 2007, 18:04

Sin ánimo de entrar en polémicas, el sentido de mi comentario era poner de manifiesto que estamos viviendo un momento en el que se están migrando muchas aplicaciones hacia la web por las ventajas que supone en cuanto al acceso desde prácticamente cualquier máquina, la independencia del SO y otras como la actualización permanente y transparente de la aplicación para el usuario.

Pienso que Outlook y Office tienen los días contados, pero no por sus competidores Open source sino por GMail (y similares) y Google Docs (similares y futuros desarrollos).

Hoy nos parece muy establecido que aplicaciones que requieren mucho procesamiento y librerías muy ligadas al harware, como las de CAD o videojuegos, nunca podrán correr sobre un navegador pero yo opino que, aunque estos ejemplos sean la meta final, hoy practicamente cualquier aplicación de uso habitual puede desarrollarse para su ejecución en un navegador.

Google Gears permite desarrollar aplicaciones web y almacenar los datos de cada usuario en una base de datos local, en su equipo. Esto elimina una importante barrera que teníamos hasta ahora y genera unas posibilidades inmensas.

Mi comentario inicial hablaba principalmente del entorno de ejecución de las nuevas aplicaciones, no del entorno de desarrollo (tema inicial del artículo). Que el entorno de ejecución sea la web no implica que el entorno de desarrollo tb lo sea. Actualmente, los entornos de desarrollo para web son aplicaciones de escritorio. ¿Tendremos en el futuro también aplicaciones web como entorno de desarrollo para aplicaciones web? Imagino que sí.

Está claro que falta mucho desarrollo para igualar las herramientas que ahora tenemos para desarrollar aplicaciones de sobremesa pero creo que los tiros irán en esa dirección.

  Johanes

28 de agosto de 2007, 20:50

Creo, aunque soy un ferviente usuario de Linux (Kubuntu), que la alternativa a Windows a medio plazo es Mac.

En los sectores elitistas, altos ejecutivos, gente que busca la diferenciación el ordenador que compran es un Mac. El S.O. es de Mac. Estos sectores constituyen la avanzadilla, los pioneros. Poco a poco se incorporaran el resto de sectores de la sociedad. Y esto a medio plazo.