viernes, 20 de junio de 2014

MySQL, PostgreSQL, Richard Stallman y la elección de una base de datos para nuestro sistema.

 La licencia GPL, la bendita licencia GPL o maldita mejor dicho para mí, es una tremenda trampa para quienes quieren hacer dinero con el software, una tremenda trampa es MySQL por usar esa licencia.
Hasta hace un tiempo, un jefe de una empresa importante de software me dijo que uno podía usar MySQL con fines comerciales y dentro de productos con código privativo sin pagar un solo centavo a Oracle, que es la actual dueña de MySQL (todo el mundo sabe que compró SUN Microsystem antigua dueña de MySQL para limitar el desarrollo de ésta Base de Datos y destruir su competencia, aparte de hacerse con los derechos de JAVA, el supuesto lenguaje libre (que de libre no tiene nada)), dijo que sólo habría que pagar si se le pedía soporte o se reformaba el código. No sé que pasará para los desarrollos ya hechos con MySQL, pero la verdad es que este jefe estaba equivocado, completamente, hay que ser estúpido para ser director y no saber la verdad del asunto, debería dejar su cargo ya que por su culpa, esta empresa se podría comer decenas de juicios.

 La verdad de la milanesa es que si de verdad querés ganar plata con un sistema, éste no deberá ser open source. Me van a decir que Google y Facebook hacen todo open source, bien, entonces que te den el código fuente de su buscador y de su red social respectivamente, ya que todo es open source. Critican a Microsoft por usar licencia privativa en su producto Windows, pero como Windows es su principal producto, al igual que la red social para Facebook y el buscador para Google (que como dije, no entregan su código fuente), entonces por qué Microsoft es el demonio y los otros los santos? Con esto no quiero decir que Microsoft sea santo, quiero decir que los otros están a su mismo nivel.

 Luego está el caso de Apple, que tiene todo privativo pero está como "santificado", quién sabe por qué, si casi todo lo que hace es privativo.

 Y después está Richard Stallman, acérrimo defensor del open source, llevando luces de fuegos de artificio y haciendo creer que todo sería un paraíso si todos los sistemas fueran open source. Si esto fuera así, a los programadores nos convendría poner una verdulería o ir a trabajar de cartoneros.

 Richard Stallman, alias la máquina de criticar, dice lo siguiente de cada lenguaje y empresa:
Java: Decía que había inseguridad y que no era open source, por lo tanto, que no usen Java.
C++: Decía que era un mal diseño, que no lo usen tampoco.
C#: Decía que si Microsoft cambia su licencia, estamos fritos todos los programadores. Así que no había que usarlo.
Windows: Que sus usuarios están presos y que es una porquería como Microsoft.
Apple: Que es peor que Microsoft.
Linux: Que arruinó el GNU y que culpa de Linus Torvals no lograron el núcleo propio y demás cosas contra Linus y Linux.
Si fuera por él, sólo habría que usar Lisp y Unix, eso y morirnos de infelices, es lo mismo.

 Soy usuario de software libre y creador de software libre, pero hay límites, límites que Richard no los tiene y critica todo lo que se le cruza sin pensar que él usa o usaba una notebook (usaba porque se la robaron, habrán dicho "es open source" y me la llevo) que no permitía instalar software privativo, siendo que esa misma restricción, impide al usuario de hacer la principal ley del open source, que es hacer lo que se quiera con lo que se compra o adquiere.

 Este post tiene un rápido análisis de las bases de datos existentes y de cuál es la indicada para hacer un sistema de doble licenciamiento (GPL y Privativo) el cuál deberá poseer conectores ADO.Net para la plataforma .NET, en cuyo caso la base de datos no tenga costo alguno:

Barajé algunas posibilidades, que son en resumen, bases de datos conocidas y con las que trabajé varias veces y a continuación detallo los resultados:

SQLServer: Esta base de datos es propiedad de Microsoft, es de código privativo y tiene una versión express totalmente funcional con algunas limitaciones con respecto a la versión completa, como 4GB de tamaño máximo por base de datos, uso de un sólo núcleo de preprocesador. La versión completa encarece demasiado el  proyecto, además de la posibilidad de una futura versión Linux, Android, Mac/OS e IOS hicieron que descartara su uso por el trauma que significaría una migración a otra base de datos compatible con los otros sistemas operativos, no ocurriría lo mismo con otras soluciones privativas de Microsoft como el caso de Microsoft Solver y Microsoft Sync Framework, que usaría en el proyecto y que mudaría de sistema operativo gracias a Xamarín y la plataforma Mono, en cuyo caso  simplemente con cambiar de librería se solucionaría el problema de migración. Por otro lado la versión Express es poco clara con respecto a su uso, pudiendo ser objeto de sanciones legales.


MySQL: Este motor de bases de datos es el más usado en el mundo, extremadamente rápido para aplicaciones incluso de gran tamaño, fácil de usar y de configurar con las características que pueden usarse triggers, funciones, backups, replicación, uso de algunas herramientas excelentes como MySQL WorkBench y Mysql Administrator. Actualmente es propiedad de Oracle que lo heredó al comprar Sun Microsystem, su antigua dueña. Parecía ser la solución perfecta ya que trabajé en esta base de datos la mayoría del tiempo, incluso la estructura de datos (Modelo Entidad-Relación) para este proyecto la realicé en MySQL WorkBench con la predisposición de  usarla casi convencido. En lo apresurado del título "Gratis" que tiene MySQL, obvié algunos conceptos de lo que significa la licencia que posee, la GPL (General Public License). El doble licenciamiento que pretendo darle al producto (Licencia Privativa y Licencia Compatible con la GPL versión 2) hubiese implicado una posible demanda por parte de Oracle si no adquiría  una versión comercial para cada producto vendido con licencia privativa, esto encarecía en 2 mil pesos por unidad de producto debiendo cargar con los costos el cliente y si usare la parte cliente (esto iba en contra de una de las ventajas que va a tener el software en donde no se pretende cobrar por cada copia de acceso a datos en modo Cliente desde tablets, smartphones y otras pcs), también debía pagar por la misma para no tener posibles problemas legales con Oracle, pasando de 6 mil pesos a 8 mil pesos aproximadamente por unidad servidora el producto en su costo total y otros 2000 mil pesos por unidad Cliente, lo cual desanimaría a los clientes que compraran el producto en cuanto al precio. Es de suponer que la licencia privativa será más barata que la open source, pero este tipo de licenciamiento al tener un costo elevado, muy pocos verán con buenos ojos comprarlo (por más verso que haya sobre el Open Source).
La Licencia GPL busca asegurarse que todo software que incluye una parte  GPL, debe ser también GPL, ya que se considera software "derivado" y si esto no fuera así, no cumpliría los términos de la GPL dando lugar a juicios por patentes.

MariaDB: Del mismo creador de Mysql, proporciona total compatibilidad con esta última es  más rápida y con novedades que la mejoraban considerablemente, pero  esto es casi lo mismo ya que su licencia también es GPL, con la diferencia que si se usa como cliente (conectores que acceden a  la BD) la licencia es LGPL (Lesser General Public License) con permiso para poder incluirla en software privativo sin tener que pagar, igualmente quedaba lo de tener que pagar por la licencia servidora para la licencia privativa. Queda entonces descartada por lo mismo que MySQL.

PostgreSQL: Posee una licencia BSD (Berkeley Software Distribution), incompatible con GPL ya que este permite poder usar la base de datos en una aplicación privativa, pudiendo distribuir en el mismo instalador a PostgreSQL gratis sin tener restricciones por patentes ni licencias, con la  única obligación de de acompañar la distribución con un archivo ".txt" que indica los permisos de la misma. Además es la mejor opción por versatilidad (compite con la base de datos Oracle y es más robusta que MySQL, además de que puedo modificarla, venderla y nunca depender de una empresa como  en el caso de MySQL o SQLServer). PostgreSQL es la indicada, además de que un sin número de servidores la apoyan en el mundo y está en constante progreso con su variedad de colaboradores y su seguridad que a todos sorprende.

SQLite: Esta base de datos no es Cliente - Servidor, no posee un proceso activo a la espera de recibir y enviar información. Es muy rápida, he realizado algunos trabajos para este motor. La gran desventaja que tiene los otros motores con este otro, es que no pueden usarse en smartphones o tablets que requieren ahorro de energía, IOS, Android, Windows Phone y RT difícilmente puedan  contener a PostgreSQL o MySQL. El objetivo no es usarla como base de datos principal sino, como base de datos que sirva para la replicación o sincronización en conjunto con PostgreSQL.

CONCLUSIÓN:
 PostgreSQL con SQLite son las indicadas. En el caso de PostgreSQL la he probado guardando imágenes y toda clase de archivos en formato bytea y anda espectacular (las guardo en distintos tamaños de previsualización e hice algoritmos que cuando crece la bd hasta cierto punto, cree una nueva bd), soy defensor total de que hay que guardar todo en la base de datos (no la ruta, todo el archivo) y cuyo análisis y experiencia sobre el tema lo dejo para otro post. MySQL también es bárbara y también la probé guardando imágenes en formato blob y mediumblob y anda fenomenal con el manejo de imágenes y archivos en general, pero muere con su licencia GPL.
 PostgreSQL es un mundo, hay de todo lo imaginable y lo inimaginable, es cuestión de ponerse, aunque acepto que lleva más tiempo trabajar con PostgrSQL que con MySQL.

Espero haber aclarado dudas y que les sirva mi análisis. Saludos.