Scala como un reemplazo a largo plazo de Java
Para inaugurar esta categoría les comparto esta lectura.
Probablemente ya hayan leído este blog post, es de por ahí del 2009. El que lo publica es James Strachan, creador de Groovy, quien menciona en el mismo artículo todas las características que le hacen pensar que Scala sería un muy buen reemplazo del lenguaje Java a largo plazo.
Vale la pena leer las razones que expone, entre las cuales destacan:
- Scala es veloz, en algunas ocasiones tan veloz como Java o menor por muy poco.
- Tipado estático, sin embargo cuenta con inferencia de tipos.
- Sintaxis y especificación reducida y simple que facilita la comprensión del lenguaje.
- Traits que facilitan la modularización.
- Los beneficios de poder elegir programar funcionalmente, inmutabilidad incluída.
En mi caso, he usado Scala solamente para probar algunos ejemplos expuestos en el libro de O'Reilly: y me ha gustado mucho, algunas cosas no mencionadas como tuples, import de los miembros de una clase, lazy val's, etc...
Independientemente de si podría ser o no un reemplazo de Java, los que aún no hayan visto Scala bien valdría la pena que le den un vistazo, igual los que ya lo están ocupando fuertemente podrían hablarnos de los puntos buenos y malos (que los ha de haber).
*** Contenido extra ***
Hace poco encontré un video en el que la gente de Twitter expone cómo les ha ido desde que cambiaron Ruby por Scala para algunos módulos. En él mencionan la importancia de contar con la madurez de la JVM y los beneficios que les ha traído Scala (al parecer están muy contentos). Aquí el video:
Saludos.
- Inicie sesión o regístrese para enviar comentarios
Yo lo que pienso es que todos
Yo lo que pienso es que todos pensamos en la manera de que Java seguirá siendo igualito a como es hoy en día... Es verdad que por ahora no se ve el mismísimo lenguaje Java tan competitivo como sus compañeros de JVM (sin duda eso es una afirmación). Lamentablemente no podemos adivinar el futuro y hacer verídica la idea de que Scala será el mejor sustituto de Java en un largo plazo pues claro que en Java 10, 9 o incluso 8 pueden existir evoluciones que se adapten a las necesidades actuales y ¿por que no? a futuro.
A mi punto de vista PERSONAL se me hizo muy aventado declarar el futuro sin considerar el famoso "cambio de variable" que pueda presentarse y no por Scala sino por sus similares y por el mismo Java
Al pensar en todos los
Al pensar en todos los NullPointerExceptions que ocurren en el software escrito en Java, lo fácil ( relativamente ) que es evitarlos y lo complicado que le resulta a la mayoría de la gente entender esto ( me refiero a todos los que por alguna razón tienen en sus manos un editor y terminan escribiendo código que termina en alguna aplicación) me causa cierta ... mmmhh tristeza pensar lo difícil que sería tomar Scala como reemplazo.
Cuando digo "gente" no me refiero claro a ninguno de los que estén leyendo esto, claro que no; uds. son programadores ( principiantes o expertos, pero programadores ) Pero hay muchísimas personas que les importa un carajo lo que es programar y viven haciendo copy/paste de aquí y allá sin nunca llegar a entender ( ni importarles ) que es lo que están haciendo. Se dedican a esto por... bueeno por azares del destino quizá. Son programadores como los llama un amigo mío que emplean el método combinatorio de programar, escriben algo e intentan con todas las opciones que salen del combo del IDE hasta que una hace lo que esperaban.
Si alguien se toma dos minutos para leer un blog o cualquier cosa referente a la programación ya demuestra interés en lo que hace y entraría automáticamente en la categoría de "programador".
¿Que pasa si Scala se volviera el reemplazo de Java? Por reemplazo entendamos que donde hoy se usa Java ahora se usaría Scala, por ejemplo este sitio se llamaría "scalamexico.org" ( alguien quire ir comprando el dominio por cierto ? ) Lo ideal sería que nos quedaramos en la industria "puros" programadores y que nos deshiciéramos de una vez de toda la "gente" que no le interesa. Pero la realidad es que siempre existirán. Ahora dado esta posibilidad, estarían todas estas personas en capacidad de usar Scala efectivamente? Harían copy/paste del Option Monad? Llenarían el código fuente de sus horrores ahora en un lenguaje un tanto más complejo de entender?
Es verdad Scala es poderoso, y hubo muchas discusiones si Scala es simple o muy complejo.
Ejemplo:
Eso es mucho muy simple "de escribir" y mucho muy poderoso, pero encierra una complejidad mayor que su contraparte en Java. Es decir, oculta mucha de esa complejidad. La versión en Java es muy larga y tedíosa ( es verdad como 30 lineas o algo así ) pero todo lo que hace está a la luz, y es más fácil de entender.
C por ejemplo es un lenguaje mucho muy simple, pero para hacer lo que la linea anterior de Scala hace le tomaría ... no sé el triple de lineas que la versión en Java.
En fin.
No creo que llegará a ser el "reemplazo" de Java, no por falta de méritos, simplemente que un lenguaje debe de ser más... fácil de aprender por que sin duda lo van a usar los "no-progamadores". Esto es, obviamente algo subjetivo.
No existen filtros. Un
No existen filtros.
Un lenguaje no determina de lo novato a lo experimentado ni del buen al mal programador... siempre habrá el que contribuye mucho y se dedica de lleno así como también el que solo toma el código y lo usa sin leer que el autor advirtió de un bug
Como alguna vez mencione: en un hilo donde decía que algunos prefieren los lenguajes alternativos por su simplicidad en uso... Me explico: ahora cuando accedes a un archivo no tienes que hacer tooodo el rollo que hacias en Java, solo basta una linea en Scala y listo y eso suena muy atractivo para las personas que no les interesa saber que es un buffer, un stream... etc. Solo les importa leer el archivo y punto. Es cuando pienso que PHP por ejemplo tiene muchos seguidores algunos buenos pero la mayoria malos, porque solo hacen "lo que les interesa" sin saber "lo que deben saber". Ahora mas que nada es de mayor preocupación tener esos PHPeros que migran por ejemplo a Scala por ejemplo
Por cierto lo que responde @ezamudio y como dice: no tiene nada de malo en elegir un lenguaje por comodidad pero esa comodidad atrae a comodinos que poco a poco se van haciendo mas
Saliendome poquito del tema Scala:
Cuando vi por primera vez Grails dije: Genial esta todo mas rapidito pero tambien dije UPS, creo que muchos lo van a agarrar como sustituto de PHP... no tiene nada de malo que los PHPeros aprendan Grails pero si que se traigan su mentalidad de PHP y que los Graileros sean los PHPeros sobrevivientes al fin del mundo
@jdd: Je je creo que ese link
@jdd: Je je creo que ese link creo un contra argumento.
Leer un archivo en Java en una sola linea:
Tengo mis reservas
Yo personalmente tengo mis reservas sobre que Scala vaya a ser un reemplazo de Java, principalmente por el tema ya comentado de que la mayoría de los programadores no están a la altura de una herramienta tan potente. No es cuestión de si es buen o mal lenguaje, es cuestión de que, IMHO, la complejidad inherente de Scala es mayor que la de Java, precisamente por que te deja hacer más cosas con menos y eso de que tenga una sintaxis más simple...
Java no es el mejor lenguaje a este lado del Missisipy, pero es el más popular en gran parte debido a su simplicidad, que obliga a veces a ser muy verborreico. Pero eso permite que hasta el más tonto medio-haga algo en Java.
Otra cosa es que sea la solución ideal. En un mundo ideal solo programarían los capaces y los lenguajes populares no tendrían por que ser para simplones, pero la realidad es muy tozuda y no hay suficientes cerebrines para cubrir la demanda, así que...
Casi veo más probable algo estilo el nuevo lenguaje de Gavin King, aunque se le criticará mucho por eso, que algo tan potente como Scala. Y no veo que tenga arreglo puesto que los creadores del lenguaje no creen que sea un problema.
Pero basta ver la evolución y uso de Lisp y derivados, por ejemplo, lenguajes potentes donde los haya pero nunca populares a nivel de toda la industria, para darse cuenta de que a veces la calidad y la popularidad no van de la mano.
Me guste o no me guste que vaya a ser así, así es como lo veo.
PD: Y aun así creo que tenemos Java para años y años, aunque sea solo por convertirse en "el nuevo COBOL".
Comparto opinion
En lo personal comparto mi opinion con @OscarRyz, en mi trabajo me he encontrado varios programadores preguntandome "¿por que no jala?" lo hice como en el ejemplo pero no me sale.
Creo que lo que realmente necesitamos son buenos desarrolladores y que conoscamos de todo pero bin y así no solo porque es el lenguaje de moda usarlo sino saber en que situaciones usarlo.
En lo personal yo tampoco
En lo personal yo tampoco creo que Scala valla a remplazar a Java, porque no siento que ese sea el objetivo de los creadores de Scala, a Scala lo veo como una alternativa más de una gran variedad que tenemos en la JVM.
Se entiende que ahorita este teniendo mucho poder y si a eso le aunamos la desilusión en el tema de la compra de Java por parte de Oracle pues pareciera que Java poco a poco pierde el rumbo, pero el hecho de pensar en la infinidad de aplicaciones que se han hecho mas la otra infinidad de aplicaciones que se empezaran a hacer en Java pues creo que le queda mucho tiempo más, quizá como comentan arriba, es posible que se perfile para convertirse en el nuevo COBOL, sin embargo creo que en el transcurso del tiempo seguirán vitaminandolo para no dejarlo morir ante las nuevas vertientes e innovaciones que puedan traer lenguajes nuevos como Scala.
Obviamente creo que Java tarde o temprano dejara de ser uno de los pesos pesados para cederle el lugar a otro nuevo lenguaje (plataforma) pero no creo que este lenguaje valla a ser Scala.
Reemplazo para Java?
Yo creo que Java como plataforma todavía tiene tiempo de vida, sin embargo lo bueno de que existan Scala, Groovy, Clojure, etc. es que tenemos alternativas para desarrollar aplicaciones que corran en la maquina virtual y la gran infraestructura que ya se tiene creada alrededor de esta como los application servers, frameworks y bibliotecas.
Estas alternativas nos pueden ayudar a construir soluciones con diferentes enfoques, y en algunos casos de manera mas sencilla y en un tiempo mas corto.
Ahora bien, el hecho que alguno de estos lenguajes pueda reemplazar a Java como lenguaje no lo veo en el corto tiempo, pues la adopción de las alternativas todavía no ha llegado a ese punto, sin embargo creo que entre mas se haga uso de estas el uso de Java se irá decrementando.
Casi ningún lenguaje reemplaza a otro
En computación casi nunca se ha dado el caso de que un lenguaje reemplace a otro. Eso no es razón para esperar a aprender un nuevo lenguaje cuando ese reemplazo suceda.
Lo que sucede con frecuencia es que un nuevo lenguaje es quizá mas eficiente para algunos dominios, y entonces le "quita" ese territorio al lenguaje que se venía ocupando, y éste último sigue usándose en otras áreas.
Quien crea que Java sustituyó para todo a C++ y a C está equivocado y basta una buena revisión en la literatura impresa y electrónica para salir de esa equivocación.
Scala es un lenguaje que debe ser estudiado pero ese estudio debe hacerse profundizando en los mecanismos de la programación funcional y en su sistema de tipos poderoso. Desafortunadamente, muchos de los tutoriales, foros, blogs, etc., que "promueven" a Scala más bien lo "demueven", pues solamente enfatizan en cosas como que podemos escribir código más breve que Java, o que las funciones son de primera clase, etc. No se meten con las cosas realmente importantes del lenguaje que por supuesto exigen del programador un conocimiento mayor de fundamentos matemáticos que muchos ingenieros en computación "olvidan" rápidamente y que sin ellos creo yo que no serían buenos desarrolladores con Scala. La programación funcional está más llena de formalismos matemáticos que la programación imperativa y obviar esos formalismos es un error.
Los que crearon Scala decidieron que fuera un lenguaje de máquina virtual y lo implementaron para JVM y CLR. Eso no es casual. Eso responde a la diversidad de cosas hechas en otros lenguajes para esos entornos incluyendo Java que pueden aprovecharse para no inventar el hilo negro. Martin Odersky sigue siendo fan de Java (a la larga varias cosas de ese lenguaje y plataforma son de su creación) y sabe perfectamente que la coexistencia de Scala y Java le da una gran importancia a Scala.
Que desaparezca Java en el corto plazo ni Dios lo sabe. Que Scala seguirá "escalando" en la escala de valores eso sí Dios lo asegura.
lenguajes vs bibliotecas
Exacto lo que iba a decir. No hay que confundir las ventajas del lenguaje, con las ventajas de las bibliotecas de objetos que incluya.... casi en cualquier lenguaje se puede hacer casi cualquier cosa en "1 linea". Es cuando tienes que hacer cosas mas complejas que el lenguaje puede (o no) hacer la diferencia.
los nuevos lenguajes solo reemplazan parte de los viejos
Totalmente... de acuerdo. Que aburrido es estar de acuerdo ;-)
Como yo lo veo es parecido a
Como yo lo veo es parecido a los sistemas operativos, ¿por que no se utiliza linux o algun derivado de unix en lugar de windows, si son mas potentes? Por que los enfoques son distintos, windows es pensado para la mayoria de usuarios que solo utilizan la computadora para usar office, navegar en internet, entrar en redes sociales, etc, la mayoria no sabe ni lo que es un bookmark, asi que hacerles entender la diferencia entre la unidad C: y el punto de montaje raiz / es un trabajo para dios. Mas sin embargo una persona que le guste la computacion, se va a meter en linux, va a aprender a como compilar e instalar drivers manualmente, a entender la diferencia entre ejecutables para linux y windows, a saber que las carpetas compartidas de windows es un standar y que el msn es un protocolo y no un programa.
Scala puede ser muy potente (yo todavia no lo utilizo) pero para los programas que tengo que desarrollar con java me ha bastado y he solucionado todo de una forma muy práctica, tal vez escribo docientas lineas de codigo donde pude haber escrito 20, pero eso es presisamente algo que me agrada de java, que uno tiene que dejar bien en claro lo que hace, y aun así pongo comentarios.
En resumen yo no creo Scala o algun otro lenguaje vaya a ser reemplazo de java mientras la JVM sea dominante, puede que otro lenguaje saque a java de la jugada haciendolo tambien con la JVM, pero no otro lenguage de la misma JVM. Y si, si me compare con los usuarios de windows ya que, pero es que se me afigura que los programadores de Scala son todos unos eruditos en matemáticas, y vaya, que de matemático tengo lo mismo que felipe calderon de buen presidente.
jejejeje sobres
@luxspes: Que aburrido es estar de acuerdo
Totalmente de acuerdo. Ya pon una para discutir "ferozmente" como se merece este sitio. Saludos, Bárbaro
Nopalin: Windows
Windows no es el sistema operativo dominante en el mercado porque haya sido pensado para ello; es el sistema operativo dominante porque Microsoft se vio muy hábil y le jugó sucio a los fabricantes de computadoras, forzándolos uno a uno a que vendieran sus equipos con Windows. La mayoría de la gente, cuando compra una computadora, la usa con lo que traiga ya instalado. Si viene instalado Windows, pues la usan con Windows. Si vinieran todas las computadoras del mundo instaladas con Linux ya de fábrica, todo el mundo usaría Linux.
En cuanto a Scala, yo tampoco creo que reemplace a Java sólo porque es más cool; sin embargo, la tendencia en el desarrollo de grandes aplicaciones es al paralelismo masivo y Scala se presta mejor para eso. Obvio es un problema que también se puede resolver con Java o con C o con lo que fuera, pero la cosa es que con Java tienes que usar Threads directamente, candados, semáforos, definir tus secciones críticas de código, etc mientras que en Scala puedes olvidarte un poco de eso porque ya es algo que se tiene "automágicamente" por el diseño del lenguaje.
No necesitas ser un erudito en matemáticas para poder programar bien en Scala. Pero sí necesitas dominar ciertos fundamentos teóricos, de la misma manera que para programar bien en Java necesitas conocer bien los conceptos de programación orientada a objetos y varios patrones de diseño y algunos otros conceptos, mientras que para programar mediocremente en PHP necesitas saber teclear.
Lenguajes de paralelización masiva (para lelos)
Recuerdo algún día que @ezamudio comentó sobre eso de los lenguajes de paralelización masiva, entre ellos VB (antes de .NET), Fox PRO y demás compañía de lenguajes que son o fueron populares y que la gente que aprendió esos lenguajes dicen que los nuevos lenguajes están condenados a morir y que el lenguaje más decente de la actualidad es PHP. (Hablando de manera general, seguro hay muy buenos programadores VB 6 y Fox PRO que ya lo superaron; estoy hablando del grueso de los desarrolladores o ex-desarrolladores de esos lenguajes).
Entonces, pues lo que sucede cómo bien han dicho es que esas personas se pasan a un lenguaje "paste & build" o a veces sin el "build" (un lenguaje de scripting) porqué pues "que tardado es compilar, sin mencionar el problemón que es empaquetar un sistema en ${lenguaje}". Y pues muchas veces los lenguajes interesantes no tienen éxito, de estos casos están Prolog y Lisp (bueno al menos yo no conozco muchos Lisperos o Prologers).
Francamente creo que Scala será el boom pero un sector más limitado, en todo caso, considero que el reemplazo de Java podría ser todavía más de Groovy, ya que la curva de aprendizaje es MUUUCHO menos marcada que en Scala, además que el estilo de programación en Groovy y Java es muy parecido.
Así que en mi conclusión, considero que para reemplazo de Java pues creo que sería Groovy (basta con ver cuantos Scaleros y cuantos Groovieros hay aquí en javamexico).
Para la mayoria de nosotros
Para la mayoria de nosotros los programadores se nos hace indistinto utilizar windows, linux, mac, etc por que tenemos una mente mas analítica. He conocido mucha gente que se compraron una minilap con linux preinstalado y adivina que? si me buscaron para que les pusiera windows. Como bien comentas microsoft jugó sucio y los vendedores de pc traia windows instalado, pero eso fue a inicios de los noventa, con el boom de un sistema gráfico, eso fue lo que le llamó la atención a los usuarios y eso fue lo que lo hizo dominante. No vamos a meternos en detalles técnicos por que ya todos sabemos quien es mejor, pero lo que si vamos a decir es que nos guste o no, la mayoria de usuarios esta en windows por su simplicidad de uso, no es lo mismo agarrar una carpeta darle boton secundario y decirle compartir, que ir a un editor de texto, abrir el archivo smb.conf, aprenderse un monton de parámetros para compartir una carpeta. Ya se que hay front-ends para eso, pero en muchas veces no vienen por default, y los que vienen no funcionan del todo bien. Basta con ver la clase de usuarios que maneja windows y sabremos que linux no es para ellos.
Y tu bien lo mencionaste, Scala puede ser de mucho mas ayuda en aplicaciones enormes que requieren paralelismo que java, pero, como tu bien mencionaste hace tiempo, la aplicaciones que la mayoria de nosotros hacemos no lo son, no le voy a meter a mi aplicacion de 50 usuarios metodos y algoritmos que utiliza facebook o google, cierto? y es mas esos 50 usuarios se dividen en 5 por modulo ya que cada empresa tiene poco personal para manejar ciertas cosas, y unos no pueden moverle a lo de otros, eso sería violar su normas y se meten en problemas con los auditores.
Yo no digo que Scala sea malo, mas bien copiando un poco a luxpess, es bueno para que? para paralelismo o velocidad de procesamiento?
sobres
moscas
Con lo de Windows, alguna vez escuché un argumento que me gustó mucho, en respuesta al típico comentario "pero es que todos usan Windows": Y a todas las moscas del mundo les gusta la caca. Que la disfruten, yo no la voy a comer.
jajaja desgraciadamente esa
jajaja desgraciadamente esa gente la prueba, por que hace aplicaciones para windows....
sobres
Hay más opciones
Tan interesante como pueda parecer Scala, lo cierto es que no es la única opción ni se está adoptando de una forma tan intensa como algunos blogs sugieren.
Twitter es un caso aparte: ellos fueron pioneros en adoptar Ruby para una solución de este tipo y también lo están haciendo con Scala. Pero no es el mismo caso que en sectores mucho más conservadores en donde Java es empleado.
Ayer escribía algunas opiniones precisamente sobre esto aquí: Java: evolución de la plataforma y los nuevos lenguajes (Scala, JRuby, Cylon, etc)
Otra opción interesante a seguir es JRuby. Y veremos qué ocurre con Cylon de Gavin King...
Fanatismo
Hola gente del foro!!!
Recién hoy descubro esta excelente página, creada por los hermanos Mexicanos (soy Argentino), y me apresuré a registrarme porque me pareció realmente buena.
Pero lo que descubro con estas discusiones es que pasa lo mismo que en mi país: Están los que usan Unix (y que por eso se creen de más nivel, pero el resto de los programadores ni los registran) , los que usan Linux (normalmente defienden el software libre, mientras que sus clientes paguen sus desarrollos), los que usan Windows (por excelente política de masificación de Microsoft ) y los que usan las Mac (que piensan que por tener una, la genialidad de Steve Jobs les llegará por propiedad transitiva); y cada uno defiende su punto de vista y descalifica a los demás a veces en forma muy agresiva o soberbia.
Yo personalmente estoy en un centro de cómputos de una Cooperativa, en donde tenemos una aplicación que accede a un motor de bases de datos Informix, el cual tiene casi 900 tablas (si, 900), con muchas tablas que sobrepasan ampliamente los 10 millones de registros. ¿Y saben qué? corre sobre un Windows 2000 Advanced Server. ¿Y saben otra cosa? gracias a Dios nunca tuvimos una caída de sistema.
Con esto no quiero decir que Windows es el mejor, porque seguramente si el motor estuviera corriendo sobre un Red Hat Enterprise Linux andaría igual de bien, o quizás mejor todavía. Pero aquí entra a jugar otra cosa: la licencia del Windows Server se paga una sola vez y vale U$S1.700,00, mientras que la licencia de RHEL cuesta U$S700,00 (por año). Así las cosas, en 3 años de usar software "libre" ya pagamos la licencia de un Windows que funciona muy bien.
Sin embargo, a la validación de los usuarios del Active Directory la hacemos con un Ubuntu Server porque nos permite filtrar de manera mucho más fácil la navegación de los mismos, al igual que el correo electrónico y la página web de la Cooperativa, ¿Y saben qué?, funcionan bárbaro. Es para sacarse el sombrero delante de Linux en lo que a cantidad de software antivirus, anti-spam y de correo electrónico ofrece en forma gratuita y funcionamiento impecable.
Es decir, utilizamos una herramienta u otra de acuerdo a nuestra comodidad o a la situación que nos toca resolver. Y si en el futuro alguien me dijera: "hay que cambiar el motor Informix para corra sobre Linux", yo diría: ¿por qué no?.
Modestamente, entiendo que debemos ser más flexibles, menos fanáticos y dejar de usar el martillo para desatornillar porque es la única herramienta que manejamos.
Yo he empezado a programar en Java recién este año, y me parece un lenguaje de programación muy bueno, pero en el trabajo la gente está acostumbrada a usar el MS Office, y entonces genero las consultas en Informix, las proceso con Visual Basic para aplicaciones y les muestro los datos en Excel. ¿Y saben qué? Visual Basic para Aplicaciones me gusta mucho también. Y las veces que he tenido que programar en PHP, me ha encantado.
En fin, amiguémonos los usuarios de Windows, Linux, Unix, los que programamos en Java, PHP, Python, Lisp, Prolog, Visual Basic .NET, C# y compartamos ideas y experiencias. Será lo mejor para todos, porque ninguno de los lenguajes que usemos cubrirá absolutamente todas nuestras expectativas.
Un saludo muy grande para todos!
Bienvenido @echenique ...
Bienvenido @echenique ... cierto es que mucha culpa la tuvo MS por la mala calidad de sus productos durante mucho tiempo, pero coincido que han mejorado bastante.
Podría decir que coincido totalmente contigo y todo iba muy bien hasta que llegaste a VB para Apps :P jajajajajaj
Saludos! :)
confusiones
1. Describiste no solo a javaMexico sino a todos los foros de computo que hay en internet
2. Libre no tiene que ser gratis. No digas que RHEL es software "libre" (asi, entre comillas) porque hay que pagar. Nada tiene que ver una cosa con la otra.
Bienvenido
Muchas gracias por la bienvenida!, es muy grato encontrar este tipo de mensajes.
Y no te preocupes, que ya el VBA se dejará de usar y se usará el .NET jajajajaja.
Saludos! :)
Confusiones
Tienes razón @ezamudio, lo que pasa es que nombré a RHEL porque junto con SuSe son los que recomiendan las empresas de Bases de Datos para instalar sus productos sobre Linux, y la casualidad es que ambas distribuciones son de pago.
Saludos!
Re: confusiones
Pues no @ezamudio. Y la verdad es que RHEL no es software libre; y no sé si sea open source (desconozco si existe un repositorio público del cual puedas descargar el código fuente de RHEL).
El punto es que según la FSF, software libre debe ser software pues, completamente libre de código privado. El caso de Linux es un proyecto que confunden muchos con software libre, el kernel Linux incluye algunos BLOBS que son propietarios. Por tanto el kernel Linux es sólo open source y no software libre. Por esa razón algunos proyectos cómo Debian apoyan la iniciativa de GNU/Hurd, es decir, un kernel 100% libre (que aunque llevan ya rato desarrollándolo).
En fin, yo creo que RHEL es de las distros menos libres, no por que cueste, sino porqué el software en sí no es libre. Cómo tampoco lo es Ubuntu o Linux Mint o Mandriva o SuSE.
fedora
Por supuesto que existe un repositorio público. Fedora es una distro de Linux construida con los fuentes de Red Hat. CentOS es otra. Aquí dice cómo bajar fuentes para RedHat. Es muy simple: con yum puedes bajar paquetes de fuentes de un montón de cosas.
Eso que dices de Linux pues no me suena, según yo Torvalds es bastante estricto al respecto y no permite que se distribuya con nada que no sea GPL (y por lo tanto, que incluya fuentes o manera de conseguirlos). Y la FSF ha ayudado varias veces a obligar a distribuidores (de hardware principalmente, que usan Linux embebido) a que entreguen fuentes porque luego se les olvida o no quieren.
Y en cuanto a Red Hat y otras distros de paga, pues lo que te están ofreciendo es simplemente el servicio de que ellos están probando un montón de distintos paquetes y te garantizan que cuando uses su distro, si únicamente instalas las versiones que ellos mismos ya han aprobado, tu sistema será muy estable. Puedes obtener fuentes de todo lo que te da RedHat, para empezar porque casi nada ha sido escrito por ellos, y lo que llegan a modificar lo distribuyen con fuente para respetar la licencia del software original, a veces incluso cuando la licencia original no lo requiere. De qué crees que es la R de RPM? Y puedes obtener fuentes de ese manejador de paquetes, que ellos desarrollaron.
Para poder tener mayor alcance, Red Hat sí llega a distribuir paquetes binarios, cuando el fabricante no quiere dar fuentes. Estamos hablando de drivers y pues hay de dos sopas, ponerse muy estrictos y no distribuir esos drivers, o distribuirlos de manera que quede claramente indicado que no es software libre y permitir que los usuarios puedan usar esos drivers propietarios cuando su hardware lo requiere.
Y de Hurd mejor ni hablar. Vaporware total; si Stallman no gastara tanta energía en insistir que le llamemos GNU/Linux, a lo mejor ya tendrían una versión realmente funcional de su kernel. Pero bueno, veo que esta discusión ya no tiene nada que ver con Java, y además apunta a radicalismos de que ninguna distro de Linux es software libre más que si tú compilas tu propio kernel y todo el software lo compilas de fuentes (Gentoo), así que mejor aquí le paro.
Re: fedora
Pues nada, nadie dijo que el software libre fuera flexible (o no al menos del software libre que se habla en la FSF).