Newsgroup: it.comp.os.linux.development
Titolo: Conpatibilita' di sistemi: proposta

Da umile programmatore, vista la grande velocità di estensione e di sviluppo
di internet e quindi di eterogeneità di macchine utilizzate, mi pongo
sempre piu' spesso la domanda di quale linguaggio utilizzare per la
realizzazione di programmi più compatibili possibile nel passaggio da un
sistema all'altro ( es. windows - linux ).
Mi rendo conto che il problema non sta tanto nel linguaggio utilizzato, ma
di come poi questo linguaggio venga "riletto" dall'altra macchina.
Ogni linguaggio, python, perl, c ha le sue librerie per linux, windows e
altre diavolerie. Quindi bisogna apportare ogni volta modifiche a ciascuna
libreria se si vuole usufruire di quel nuovo componente messo a
disposizione da quella piattaforma.
La mia domanda, ora, è semplice: perchè non sarebbe più efficiente un
sistema server-client montato su ciascuna piattaforma ?
Mi spiego meglio.
Realizziamo un particolare server per windows.
Mettiamo che questo server abbia un suo particolare protocollo che può
essere: <apri_form>, <chiudi_form>, <scrivi_controllo_button>, ecc,
insomma, un protocollo con tutti i comandi che si possono inviare e
ovviamente le risposte ricevute dopo l'invio dei comandi ed eventuali
eventi che scattano quando l'utente o il sistema interagisce con il
programma creato.
Ovviamente un server del genere con gli stessi comandi si può/deve
realizzare anche su altri sistemi operativi, quali linux e compagnia bella.
I vantaggi ? Mi vengono in mente questi:
1) Un unico protocollo (che funge da libreria) di comandi INDIPENDENTE dal
linguaggio di programmazione utilizzato: potete realizzare il vostro
programma in un qualsiasi linguaggio che consenta la comunicazione tramite
socket, perchè è attraverso il socket che manderete e ricevere i messaggi
dal server; il massimo sarebbe lasciare i messaggi in chiaro (ovvero a..z,
A..Z, 0..9, :,.;?) per poter essere utilizzato anche con telnet o ssh.
2) Il server può comunicare al client le caratteristiche del sistema sul
quale risiede e soprattutto quali componenti sono installati; sul server, a
questo punto, si realizza un wrapper di comandi per questi componenti;
ogni server avrà gli stessi comandi per agire su componenti con funzioni in
comune; mettiamo di voler realizzare un player di mp3 che funzioni su
windows e su linux; questi due componenti potrebbero avere (e sicuramente
hanno) delle funzioni con nomi e parametri diversi. Ma sicuramente ci
saranno delle funzioni che svolgono lo lavoro in comune quali open, play,
forward, rewind, close, ecc. 
Il wrapper metterà a disposizione del client le funzioni open, play,
forward, rewind, in modo tale che il client sarà indipendente dal tipo di
controllo utilizzato; sarà poi il server che manderà al suo componente
locale la chiamata corrispondente.
Pensandoci sembrerebbe di voler riscrivere Java, ma di differenze ce ne
sono: nel punto 1) java condiziona a scrivere il programma nel suo
linguaggio di programmazione, qui potete utilizzare qualsiasi linguaggio di
programmazione; nel punto 2) java implica l'utilizzo dei SUOI componenti e
non di quelli messi a disposizione dal sistema.
Per giustificare il punto 1 vi scrivo quella che potrebbe essere una
transazione client-server con client linux e server windows tramite telnet.
Chiamerò il client linux con C ed il server linux S.
C: telnet serverwindows <porta_fittizia>
S: 201 <id_processo> Ok, benvenuto
C: <id_processo> crea_maschera
S: 202 <id_processo> <id_maschera> Maschera creata
C: <id_processo> <id_maschera> crea_pulsante
S: 203 <id_processo> <id_maschera> <id_pulsante> Pulsante creato
...
I primo codice rilasciato dal server potrebbe essere il tipo di operazione
eseguita:
201: creazione processo eseguita
202: creazione maschera del processo <id_processo> eseguita
203: creazione pulsante della maschera <id_maschera> del <id_processo>
eseguita
Ovviamente, appartenendo un pulsante ad una maschera, il client riceve  l'id
del processo quello della maschera e infine quello del pulsante(203).
Appartenendo, invece, la maschera soltanto al processo, il client riceve
SOLO l'id del processo e quello della maschera appena creata(202)
Il protocollo lo sto inventando su due piedi, ci saranno tante imprecisioni
e scorrettezze, ma spero di aver chiarito la mia idea.
-- 
Ciao,
        Fabrizio
<=- 
http://www.negusweb.it
 -=>

Negus wrote:
Ovviamente CoMpatibilità ... :-)


 ...
bello lì, ma lo sia già che non tutti i sistemi operativi gestiscono le
connessioni sui socket allo stesso modo? Quindi oltre a farti il server
devi comunuqe farti delle funzioni legate ai sistemi operativi che vuoi
supportare. Idem poi per esempio per le funzioni di accesso ai file. Idem
per le funzioni di gestione della memoria. Idem per....
E poi non parliamo delle infami prestazioni che avresti, anche perché con
una roba del genere ti sogneresti il multithreading e il multitasking.
 

 per le funzioni di gestione della memoria. Idem per....
Ovviamente il server avrebbe in sè tutte le funzioni necessarie.


 sistema server-client montato su ciascuna piattaforma ?
Oltre a quello che ti hanno già risposto, ci sono altre soluzioni migliori
della tua, ad es. virtual machines e java. La virtual machines è tutto
sommato (sebbene sia un'aprossimazione che mi lasciate concedere, spero) un
application server (ma i socket non c'entrano niente, per fortuna...).

 un application server (ma i socket non c'entrano niente, per fortuna...).
Funzionano anche via rete questi application server ?


 Funzionano anche via rete questi application server ?
avrebbero senso di esistere se non lavorassero in rete?

 Ovviamente il server avrebbe in sč tutte le funzioni necessarie.
non hai capito per niente: il client deve aprire un socket. E giŕ lě
iniziano i problemi di portabilitŕ sulle varie piattaforme

 Funzionano anche via rete questi application server ?
Sei presuntuoso e ignorante: le due cose formano un mix micidiale!
Non hai mai sentito parlare di Java, Serverlet e JSP? E' l'eccellenza dello
sviluppo su web.

 iniziano i problemi di portabilità sulle varie piattaforme
Che problemi di portabilità ci sono ?


 Che problemi di portabilità ci sono ?
non tutti i sistemi operativi hanno le stesse api...