Se me ha ocurrido una idea muy interesante. Igual la podemos desarrollar.

Iniciado por OmarHack, 3 Julio 2013, 18:55 PM

0 Miembros y 2 Visitantes están viendo este tema.

OmarHack

Cita de: Oblivi0n en  4 Julio 2013, 05:13 AM
Ya no es solo el hecho de querer compilar para distintos SO, es compilar para distintas arquitecturas. Aún poniendo ese ejemplo que dices de el servidor / maquina virtual. Si tu tienes un código para Windows, lo mas probable es que no haya versión posible para Linux, u otro SO diferente.

Podría ser posible si todos los SO's implementasen el standart POSIX, pero no es asi  ::)
En el ejemplo que puse está claro que el código tiene que ser multiplataforma, si no no tiene sentido.

Cita de: Oblivi0n en  4 Julio 2013, 05:13 AM
Si no se ha hecho ya es por que es "imposible"
¿Entonces la humanidad ya no puede hacer nada más ni crear nada nuevo, porque si no se ha hecho ya es por que es "imposible"?
Estoy seguro de que se puede hacer, si no es así será de otra forma, pero que se puede hacer lo tengo clarísimo, aún que se tenga que unir en un solo sistema todos los que existen. Pero posible, es. Otra cosa es que encontremos la manera de que sea viable crearlo.

Un saludo.

I like to test things.

El Benjo

Cita de: OmarHack en  4 Julio 2013, 05:54 AM
En el ejemplo que puse está claro que el código tiene que ser multiplataforma, si no no tiene sentido.

Disculpa, pero ya no te entendí. Si el código tiene que ser multiplataforma para que funcione con tu aplicación entonces le estás dejando las mismas responsabilidades al programador de trabajar para cada sistema operativo en vez de que tu aplicación la adapte, que es lo que desde un principio se dijo que debía hacer. ¿O entonces cuál es la ventaja de tu aplicación? Es decir que mi aplicación de Windows que use el registro no va poder funcionar en linux ni con tu aplicación a menos que yo mismo le escriba el código?

Disculpa, pero este tipo de cosas son las que desde un principio se estuvieron discutiendo.  :(
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

OmarHack

Lo estoy dividiendo en dos proyectos, uno sería el de un servicio que compilara tu código multiplataforma para todos los sistemas que le indiques para no tener que instalar Mac, Linux... y todas las herramientas de desarrollo y compiladores que se necesitan.

Te pongo un ejemplo, si yo solo tengo Windows y hago un programa que va a servir para Linux y Mac, que el programa me devuelva el ejecutable para ambos sistemas sin tener que tenerlos yo instalados ni todas las herramientas necesarias para la compilación. El ahorro de tiempo es importante y el programa tiene salida y se podría conseguir.

Y después está el otro, para el cual se podría decir que aún no tenemos una idea viable y para la que abrí explícitamente el tema. Que sería que se pudieran usar todos los programas en cualquiera sistema o alguna alternativa similar. Yo sigo pensando en como, seguro que se me ocurre algo.



I like to test things.

daryo

Cita de: kub0x en  4 Julio 2013, 00:15 AM
Llamadme iluso pero...

Máquinas que corran SO de todo tipo alojadas en un espacio cualquiera a las que se les envía el código del ejecutable, librería o componente a compilar. Solo habría que crear un canal de comunicación con dichas Máquinas Virtuales y que éstas sean capaces de reconocer y generar el ejecutable compilado para su propia plataforma. Esto actualmente es factible (y me atrevo a decir hasta que es sencillo) si lo comparás con los métodos expuestos aquí.
Saludos :)
me parece que tiene un problema y es la privacidad , no me gusta la idea de que para ejecutar algo se deba pasar antes por la nube .

buenas

kub0x

Nadie ha dicho que los binarios tengan que pasar por donde se centran todas las miradas (en la cloud). Aun de ser así, el canal de comunicación estaría cifrado por métodos criptográficos actualmente seguros.

Saludos!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


WHK

Cita de: kub0x en  4 Julio 2013, 00:15 AMSolo habría que crear un canal de comunicación con dichas Máquinas Virtuales y que éstas sean capaces de reconocer y generar el ejecutable compilado para su propia plataforma.

Eso si, es totalmente distinto a lo expuesto al comienzo pero tienes toda la razón y es muy factible y tienes toda la razón de que pueda ser algo simple.

Por ejemplo, creamos un código, llamemoslo c$ que su sintaxis sea perfectamente la misma que java, ahora digamos que lo vamos a compilar, entonces el compilador toma todas las instrucciones del código y lo compila para código máquina embebiendo todas las librerías en formato .h necesarias para que funcione bién, este debería ser capaz de generar por lo menos 4 binarios: un exe (windows), un binario de gnu/linux, un binario para unix (mac) y otro para bsd.

Solo entonces no dependería de una maquina virtual porque el compilador debería ser el encargado de interpretar linea por linea el código y saber generar las mismas instrucciones en código máquina para cada plataforma ahorrando el traspaso de librerías, mv, etc.

Por ejemplo:

{ System.console().writer().println("hola"); }

Al compilarlo debería generar un archivo binario para windows que haga uso de la librería strings.h para windows, al generar uno para linux que haga uso de strings.h para linux y así para cada sistema donde cada archivo .h o .cpp contenga la equivalencia en su sistema operativo y lo compile y genere los 4 ejecutables, cosa que cuando llames al de windows a traves del cmd este diga "hola" y al llevar el binario de linux a ese sistema y ejecutarlo desde el bash también diga "hola".

Las rutas de directorios deberían llamarse igual que en java: /a/b/c, donde / equivale a c: y para entrar a d: podría ser por ejemplo: disk://d/a/b/c, entrará al disco d de windows al directorio a/b/c, y cuando se ejecute en linux entrará al disco montado con nombre "d" y si no existe dará una excepción.

Como se ve, es 100% posible, tendrá sus ventajas y desventajas, no las conozco pero la idea no es mala, talves algo que en java pese 100kb termine pesando 50mb pero ya no necesitará de la maquina virtual que pesa al rededor de 500mb en total y al ser ejecutado en tiempo real su velocidad sería mucho mayor.

OmarHack

Cita de: WHK en  4 Julio 2013, 15:03 PM
Por ejemplo, creamos un código, llamemoslo c$ que su sintaxis sea perfectamente la misma que java, ahora digamos que lo vamos a compilar, entonces el compilador toma todas las instrucciones del código y lo compila para código máquina embebiendo todas las librerías en formato .h necesarias para que funcione bién, este debería ser capaz de generar por lo menos 4 binarios: un exe (windows), un binario de gnu/linux, un binario para unix (mac) y otro para bsd.
Y después de hacer eso incluso se podría hacer un quinto binario. Sería un binario con el formato que le pongamos y en el irán los cuatro binarios. Los cuatro con un índice para cada sistema. Así el binario final será ejecutado en el sistema que corresponda y por lo tanto funcionará en todas las plataformas. En el caso de que el programa genere o use archivos externos, estos archivos se compartirían por los cuatro binarios embebidos en el quinto. Sería algo así:

"Comprimimos" los cuatro binarios en un formato .universal agregándole índices:
Programa de Windows:
Archivo .exe ya compilado.
Programa de Linux:
Archivo .Deb ya compilado
Programa de Mac:
...........
Programa de FreeBSD:
...........

Así al ejecutar el programa en Windows buscará por el índice el .exe
En linux el .deb, etc.

Un ejemplo:

Imaginaros, todos los binarios se encargan de crear un .txt con números de teléfono dentro para más tarde acceder a ellos desde al mismo programa.

Pues los cuatro binarios usarán el mismo archivo.txt

Así cambiarás los datos del archivo y los leerás desde cualquier de esos cuatro sistemas. Esto hará al programa independiente de cualquier sistema y se podrán trabajar con los mismos datos desde cualquier sistema.

Llevado a programas más complejos; con el mismo código tendrías un solo binario portable entre sistemas.

Esto implicaría que el código del programa fuera multiplataforma, pero estoy seguro de que millones de usuarios considerarían útil poder usar el mismo programa sin alterar en todas las plataformas. Te ahorraría descargar el mismo programa para los cuatro sistemas e importar la configuración y los datos constantemente entre todos ellos, actualizarlos todos cada uno con sus distintas versiones. Problemas entre usuarios por las distintas versiones de los programas, etc.



I like to test things.

Oblivi0n

Yo no he dicho que fuese del todo imposible, pero es evidente que, si fuese rentable, las empresas lo habrían desarrollado, crees que una empresa que genere versiones para Linux + Mac + Windows no se lo habrá planteado? Imaginate, el coste de desarrollar eso, de ser posible, es mas caro que el que una empresa estima en portar TODOS sus productos (por ejemplo Adobe con la suite creative, microsoft con office.... etc etc)

daryo

Cita de: Oblivi0n en  4 Julio 2013, 15:30 PM
Yo no he dicho que fuese del todo imposible, pero es evidente que, si fuese rentable, las empresas lo habrían desarrollado, crees que una empresa que genere versiones para Linux + Mac + Windows no se lo habrá planteado? Imaginate, el coste de desarrollar eso, de ser posible, es mas caro que el que una empresa estima en portar TODOS sus productos (por ejemplo Adobe con la suite creative, microsoft con office.... etc etc)
eso mismo estaba pensando digo cuales deben ser las capacidades del servidor para compilar cientos o miles de aplicaciones? y ademas pongamole unos cuantos gigas a algunas  de estas aplicaciones.

cuantos servidores se necesitarian para esto?

no se que tan practico seria la verdad

si me equivoco en algo me gustaria que me lo dijeran  ;D
buenas

Oblivi0n

Cita de: OmarHack en  4 Julio 2013, 15:28 PM
Y después de hacer eso incluso se podría hacer un quinto binario. Sería un binario con el formato que le pongamos y en el irán los cuatro binarios. Los cuatro con un índice para cada sistema. Así el binario final será ejecutado en el sistema que corresponda y por lo tanto funcionará en todas las plataformas. En el caso de que el programa genere o use archivos externos, estos archivos se compartirían por los cuatro binarios embebidos en el quinto. Sería algo así:

"Comprimimos" los cuatro binarios en un formato .universal agregándole índices:
Programa de Windows:
Archivo .exe ya compilado.
Programa de Linux:
Archivo .Deb ya compilado
Programa de Mac:
...........
Programa de FreeBSD:
...........

Así al ejecutar el programa en Windows buscará por el índice el .exe
En linux el .deb, etc.

Un ejemplo:

Imaginaros, todos los binarios se encargan de crear un .txt con números de teléfono dentro para más tarde acceder a ellos desde al mismo programa.

Pues los cuatro binarios usarán el mismo archivo.txt

Así cambiarás los datos del archivo y los leerás desde cualquier de esos cuatro sistemas. Esto hará al programa independiente de cualquier sistema y se podrán trabajar con los mismos datos desde cualquier sistema.

Llevado a programas más complejos; con el mismo código tendrías un solo binario portable entre sistemas.

Esto implicaría que el código del programa fuera multiplataforma, pero estoy seguro de que millones de usuarios considerarían útil poder usar el mismo programa sin alterar en todas las plataformas. Te ahorraría descargar el mismo programa para los cuatro sistemas e importar la configuración y los datos constantemente entre todos ellos, actualizarlos todos cada uno con sus distintas versiones. Problemas entre usuarios por las distintas versiones de los programas, etc.


Eso es una maldita locura, osea, pretendes hacer un ejecutable con ejecutables de todos los SO? vamos, un porgrama como Photoshop, que te carga 600 MB de ram tranquilamente, que me compro, exabytes de RAM?

1) Si el código es multiplataforma (p.e: ANSI C), mi único trabajo, es recompilarlo, osea, los escasos 2 segundos que puede perder una persona en escribir gcc en una linea de comando.

2) Si el programa no es multiplitaforma vas a fastidiarte.

3) hay cientos de lenguajes, algunos no estan en windows, otros no estarán en linux, otros no estarán en free bsd, otros no estarán en HP-UX, otros no estarán en solaris, otros no estarán en red hat... ( te vas dando cuenta también de la cantidad de sistemas operativos que hay? )

4) De que te vale tener un cluster de servidores con distintos so? osea, yo hago mi programa en windows, lo voy a hacer en C#, y tirando de .net, no C# básico. Como compilas eso para HP-UX? o para FreeBSD?  no puedes hacer la piedra rossetta de los lenguajes y hacer un interprete que acepte de todo a C. El tamaño del servidor sería BRUTAL, y los costes totalmente desproporcionados. Esto teniendo en cuenta, que pudieses compilar de un sistema a otro... (que en el 99% de los casos NO SE PUEDE)

Está bien dejar volar la imaginación y tener ideas, pero un poco de rigor , por favor, que no todo es ponerse a hacer código

EDIT: También tienes que , no todos los lenguajes serían compatibles entre sí, probablemente, como dices que programas en C++ , estarás acostumbrado al paradigma orietnado a objetos, te invito a que veas el paradigma funcional, o el paradigma orientado a aspectos, para que veas que hacer lo mismo en objetos/imperativo es MUY TEDIOSO