File oggetto: cosa sono, dove li trovo e a cosa servono?

Salve :slight_smile:

Dalle FAQ leggo che se non volessi rilasciare il mio codice sorgente nel momento in cui commercializzo un prodotto sono libero di farlo A PATTO CHE rilasci i “file oggetto” per permettere agli altri il relinking(?).

Using the Arduino core and libraries for the firmware of a commercial product does not require you to release the source code for the firmware. The LGPL does, however, require you to make available object files that allow for the relinking of the firmware against updated versions of the Arduino core and libraries. Any modifications to the core and libraries must be released under the LGPL.

Qualcuno potrebbe spiegarmi con precisione cosa sono, dove li trovo e a cosa servono i file oggetto del mio programma? Ed inoltre… cosa è il relinking?

Sono giorni che cerco online ma non trovo assolutamente nulla… :sob:
Grazie a tutti anticipatamente per le risposte :slight_smile:

In poche parole il percorso da fare per far diventare un codice sorgente un oggetto è questo:

Codice Sorgente -> Compilatore -> File oggetto (.obj)
File Oggetto -> Linker -> File Eseguibile

In maniera semplice, te scrivi il codice sorgente del tuo programma, poi lo passi in pasto al compilatore che traduce il codice in linguaggio macchina "grezzo" (e questo prende il nome di file oggetto), e infine passi il file oggetto al linker che appunto serve a collegare al file oggetto le varie librerie che servono al sistema operativo per farlo funzionare, da quì ottieni il file eseguibile. Il relinking è appunto la possibilità di linkare librerie arbitrarie ( a seconda dell'os ad esempio ) per poter far diventare eseguibile il file oggetto.

Spero di esserti stato di aiuto, sono i passaggi base della programmazione. Tutte le volte che trasformi un codice sorgente in un software vengono fatti questi passaggi, non te ne rendi conto perchè ci pensa il tuo IDE ( l'ambiente di sviluppo ) . Ciao, Duecce

Grazie mille! La tua spiegazione è chiara e semplice :)

Una cosa non mi è ancora tanto chiara però: come posso caricare il file oggetto su Arduino?

Pet0: Una cosa non mi è ancora tanto chiara però: come posso caricare il file oggetto su Arduino?

Semplicemente NON PUOI ...

... su Arduino (... in realtà sulla MCU) carichi solo il codice eseguibile, ossia il prodotto del Linker che mette assieme più moduli oggetto prodotti dal compilatore (quando compila i sorgenti) ;)

sorgente_1 ---> compilatore ---> oggetto_1 \
sorgente_2 ---> compilatore ---> oggetto_2 |
...                                        + ---> linker ---> eseguibile
...                                        |    
sorgente_n ---> compilatore ---> oggetto_n /

... è uno schema semplificato, ma ti dovrebbe chiarire le idee.

Guglielmo

E neppure ti serve, caricare il file oggetto. Ti serve solo per poterlo allegare, visto che da quanto dici è obbligatorio. Poi cosa se ne possano fare gli altri è tutto un altro discorso.

Dalle FAQ leggo che se non volessi rilasciare il mio codice sorgente nel momento in cui commercializzo un prodotto sono libero di farlo A PATTO CHE rilasci i “file oggetto” per permettere agli altri il relinking(?).

Non l’ho capita.

Se io voglio vendere il mio arduino con un programma precaricaricato che fa lampeggiare un led devo dargli anche il programma?

pablos: Se io voglio vendere il mio arduino con un programma precaricaricato che fa lampeggiare un led devo dargli anche il programma?

Se il programma lo hai scritto con l'IDE e con librerie GPL ... o la vaga idea che dovresti rilasciare proprio i sorgenti ... ... ma non ricordo bene la licenza ... se ne era discusso tempo fa ... prova a fare una ricerca ... :roll_eyes:

Guglielmo

P.S. : Guarda QUESTO mio post ... e anche la relativa discussione ;)

Ma non ci lascio proprio niente!!! :grin: anzi blocco pure la lettura e scrittura, non si sa mai me mi rubino il software per far lampeggiare un led :)

E poi a questi che lo comprano ci dico che ho scritto tutto io... ma che vogliono?? ahahahhaha

Il mio telecomando universale ha dentro un atmel tiny, chi mi dice che non hanno uploadato il software con IDE arduino? (tra l'altro ogni tanto si inchioda e devo togliere e rimettere le batterie) Il software non me l'hanno dato

Il mio televisore ha dei micro all'interno, adesso voglio il software perchè secondo me l'hanno fatto con librerie di terzi. :astonished:

SI, infatti, una cosa è la teoria e ... un'altra la pratica però ... :roll_eyes: ... se un giorno a qualcuno venisse il "prurito" e si mettesse a fare "reverse engineering" ... :smiling_imp:

Guglielmo

paulus1969: E neppure ti serve, caricare il file oggetto. Ti serve solo per poterlo allegare, visto che da quanto dici è obbligatorio. Poi cosa se ne possano fare gli altri è tutto un altro discorso.

Eh... appunto! Mica ho ben capito cosa debbano farci gli altri :sweat_smile:

gpb01: Semplicemente NON PUOI ...

... su Arduino (... in realtà sulla MCU) carichi solo il codice eseguibile, ossia il prodotto del Linker che mette assieme più moduli oggetto prodotti dal compilatore (quando compila i sorgenti) ;)

sorgente_1 ---> compilatore ---> oggetto_1 \
sorgente_2 ---> compilatore ---> oggetto_2 |
...                                        + ---> linker ---> eseguibile
...                                        |    
sorgente_n ---> compilatore ---> oggetto_n /

... è uno schema semplificato, ma ti dovrebbe chiarire le idee.

Guglielmo

Grazie anche a te Guglielmo per avermi chiarito ancor di più le idee :)

gpb01: Se il programma lo hai scritto con l'IDE e con librerie GPL ... o la vaga idea che dovresti rilasciare proprio i sorgenti ... ... ma non ricordo bene la licenza ... se ne era discusso tempo fa ... prova a fare una ricerca ... :roll_eyes:

Guglielmo

P.S. : Guarda QUESTO mio post ... e anche la relativa discussione ;)

P.S. Già, il codice sorgente è tuo e puoi gestirlo come preferisci. E' scritto nelle faq ;)

Pet0: P.S. Già, il codice sorgente è tuo e puoi gestirlo come preferisci. E' scritto nelle faq ;)

Antico detto cinese:

"tutti bravi a fare l'open con il source degli altri"

:grin:

astrobeed: Antico detto cinese:

"tutti bravi a fare l'open con il source degli altri"

:grin:

Ho fatto delle ricerche, date un'occhiata a cosa dice l'amministratore del forum: Code security / privacy...? Admin answer HERE .

La riporto qui per sicurezza, affinchè tutti possano leggere quello che spiega (ma che tra l'altro, e lo ripeto per la centesima volta, è già presente nelle faq di arduino.cc):

hello

You can use Arduino to make a commercial product following some simple rules.

  • if you have made your circuit as a derivative of the Arduino board you must release the design files with a CC-BY-SA license like the original cad files
  • If you build your circuit as a shield that plugs on top of an Arduino board all the circuit is yours and you don't have to release anything
  • The programs written on Arduino are yours. if you have modified the core files or one of the libraries you must make your modifications available to everybody
  • You can call your product in any way you like as long as you don't call it Arduino
  • If in the documentation for your product you want to write "Powered By Arduino" that would be appreciated :)
  • There is no revenue sharing for any derivative work (unless it uses the Arduino name see http://www.arduino.cc/en/Main/Policy )

having said this. The code on the Arduino can be read after it has been programmed. It will be available only in binary form but can be programmed on another board (i.e. copied)

There is a "fuse" that you can burn that will make the code unreadable but it will also make it hard for you to update your code once it's on the board.

If you patent something you have to do that in every place in the world you want to protect your idea. the more countries the more payments :) Patents reveal your idea to the whole world.. some people don't patent so they don't have to provide any detail about their invention

PS you can't patent Arduino :) :)

PPS You should email us at team (at) arduino (dot) cc to let us know what you're building. We're always interested in hearing what people are doing with Arduino

Quello che è protetto da licenza CC-BY-SA e che deve rimanere tale dal momento in cui commercializzo un prodotto sono: le librerie e gli schemi dei circuiti di Arduino.

Il codice scritto da me è mio e ci faccio quello che voglio. Solo perchè è scritto con l'IDE di Arduino ed in Processing devo per forza renderlo open-source? Se fosse così, ad esempio, ogni codice scritto in Python (linguaggio di programmazione open-source) per mezzo di Geany ( IDE open-source) deve essere reso pubblico? Mi sembra un pò pretenzioso..

Allora fai un bel CD insieme al tuo prodotto con dentro i file dell'IDE, tutte le librerie che hai usato, un po' di link di riferimento a schemi, un bel testo di ringraziamento a tutti, tralasci però lo sketch che è tuo, frutto del tuo intelletto. Alla fine questo CD non serve ad una benemerita ci**a dato che non è possibile risalire al programma, ma dovresti essere in regola con te stesso, con la comunità e i proprietari dei vari software.

O anche così non va bene? :grin:

PS: anche se di prodotto non possiamo parlare.

Pet0: Il codice scritto da me è mio e ci faccio quello che voglio.

Magari se leggi con più attenzione scopri che se lo schema del tuo prodotto è derivato da Arduino deve essere open hardware, però se è un tuo schema personale non hai alcun obbligo, va da se che uno schema generico con un dentro un Atmega 328 o un Atmega 2560 non è Arduino e non hai alcun obbligo. Il tuo codice è solo tuo e sei tu a decidere se deve essere open o closed source, però se per realizzare il tuo codice fai delle modifiche al core, o alle librerie, di Arduino queste modifiche le devi rilasciare open source, però il tuo codice può benissimo rimanere closed source.

Pet0: Se fosse così, ad esempio, ogni codice scritto in Python (linguaggio di programmazione open-source) per mezzo di Geany ( IDE open-source) deve essere reso pubblico? Mi sembra un pò pretenzioso..

Proprio Python, che è un linguaggio interpretato in cui si distribuiscono direttamente i sorgenti, dovevi prendere come esempio... :D

(Esistono dei "compilatori", ma quasi nessuno li usa, visto che il bello di Python è anche nella multipiattaforma)

Pet0: Il codice scritto da me è mio e ci faccio quello che voglio. Solo perchè è scritto con l'IDE di Arduino ed in Processing devo per forza renderlo open-source?

ci sono anche le questioni etiche, se hai fatto tutto usando prodotti opensource forse sarebbe giusto fornire i sorgenti di un prodotto al fine di non limitare le liberta' degli utenti.

Se arduino ti avesse dato il tuo bel digitalwrite ed il tuo bel delay con un sistema proprietario, quindi dove tu non avresti potuto guardare il codice del core, delle librerie, ecc il tuo led blinckerebbe ugualmente. Forse per te non sarebbe cambiato niente, visto che saresti arrivato lo stesso a cio' che ti proponevi di fare, invece io, e fortunatamente molti altri qui dentro, non avremmo minimamente considerato il mondo arduino

Testato: ci sono anche le questioni etiche, se hai fatto tutto usando prodotti opensource forse sarebbe giusto fornire i sorgenti di un prodotto al fine di non limitare le liberta' degli utenti.

Belle parole che però cozzano con il mondo reale, quando si parla di prodotti tocca pararsi le terga in tutti i modi. C'è gente che con il codice che scrive ci mangia e dà da mangiare alla famiglia, hanno tutti i diritti di difendere il loro lavoro ed evitare che i soliti furbetti rubano il loro lavoro per poi spacciarlo come proprio.

L'incredibile è che l'imposizione delle regole viene spesso subita. Forse sarà perché in Italia di leggi governate dal buon senso e dalla logica non ne abbiamo, non lo so.

Però alle volte le regole se interpretate correttamente giocano a nostro favore.

Qualcuno potrebbe spiegarmi con precisione cosa sono, dove li trovo e a cosa servono i file oggetto del mio programma? Ed inoltre... cosa è il relinking?

Sono giorni che cerco online ma non trovo assolutamente nulla... :sob: Grazie a tutti anticipatamente per le risposte :)

Una domanda di questo tipo fa capire quanto sia estraneo al mondo della informatica e lontano mille miglia dalla possibilità concreta di creare un prodotto. Se si ha comunque questa (lecita) ambizione, anche se il percorso è lungo è tortuoso, si inizia a studiare dalla base fino ad avere le necessarie competenze per raggiungere il risultato.

La domanda è lecita, ma posta a utenti di una comunity che crede alla licenza GLP, LGPL e in genere a tutte quelle licenze compatibili con la definizione del termine Open Sources suona come un contro senso. Poi ogni utente reagisce a modo suo, io ad esempio (viste le finalità) non avrei neanche risposto, tanto sarebbe stato fiato sprecato (e infatti mi astengo). Io la domanda la interpreto così; Come faccio a contribuire a distruggere l'open sources per mio tornaconto?

Il codice scritto da me è mio e ci faccio quello che voglio. Solo perchè è scritto con l'IDE di Arduino ed in Processing devo per forza renderlo open-source? Se fosse così, ad esempio, ogni codice scritto in Python (linguaggio di programmazione open-source) per mezzo di Geany ( IDE open-source) deve essere reso pubblico? Mi sembra un pò pretenzioso..

Certo che è pretenzioso. Di contro potrei rispondere che le informazioni che ho acquisito nel corso degli anni sono mie e quindi ci faccio quello che voglio, e posso fornirle a pizzichi e bocconi in cambio di un lauto compenso. :-X

Belle parole che però cozzano con il mondo reale, quando si parla di prodotti tocca pararsi le terga in tutti i modi. C'è gente che con il codice che scrive ci mangia e dà da mangiare alla famiglia, hanno tutti i diritti di difendere il loro lavoro ed evitare che i soliti furbetti rubano il loro lavoro per poi spacciarlo come proprio.

Visto che di furbetti c'è l'invasione meglio tenersi abbottonati. Però è anche vero che se devono replicare una applicazione embedded lo fanno a prescindere dalla licenza, certo con i sorgenti aperti sembra più semplice e la cosa attira i furbetti, che solitamente sono ignoranti, per cui prima o poi pagheranno per la loro ignoranza.

PS: Sta tutto scritto nero su bianco sulla licenza LGPL e GPL.

Ciao.

Testato: ci sono anche le questioni etiche, se hai fatto tutto usando prodotti opensource forse sarebbe giusto fornire i sorgenti di un prodotto al fine di non limitare le liberta' degli utenti.

Se arduino ti avesse dato il tuo bel digitalwrite ed il tuo bel delay con un sistema proprietario, quindi dove tu non avresti potuto guardare il codice del core, delle librerie, ecc il tuo led blinckerebbe ugualmente. Forse per te non sarebbe cambiato niente, visto che saresti arrivato lo stesso a cio' che ti proponevi di fare, invece io, e fortunatamente molti altri qui dentro, non avremmo minimamente considerato il mondo arduino

Non me la prendo con te poichè sei l'unico che hai scritto oggettivamente le cose come stanno, facendomi capire in che modo l'open source influisca sul mondo di Arduino e sui suoi utilizzatori. Ed inoltre mi fa piacere che ogni tanto qualcuno ragioni senza puntare il dito contro urlando "Blasfemo! Al rogo!". Persone che giudicano altre solo da una domanda su un forum non meritano neanche una risposta.

Comunque ciò che mi premeva farvi capire (siamo andati OT, sorry) è che ci sono delle regole da rispettare, principalmente di tue tipi: legali ed etiche. Spesso queste due combaciano, altre volte no. Questo è ciò che accade in Arduino. La regola c'è e non corrisponde a quella etica. Volete dire che non faccio eticamente la cosa giusta? Volete dire che sono un blasfemo e che merito la morte per impiccagione? Perfetto. Dite quello che vi pare. Siete liberi di dire ciò che volete, come avete già fatto, d'altronde. Ma non potete dire che sono in torto, poichè non lo sono. La regola c'è e la sto rispettando. Se vi volete lamentare che la gente non rilasci i loro codici sorgenti credo che fareste meglio a mandare una email allo staff di Arduino (provate qui http://arduino.cc/en/Main/ContactUs ) dicendo loro: " Ragazzi, qui si parla di OpenSource, perchè diamine c'è scritto che ognuno può farci quello che vuole con il codice sorgente e gli schemi del proprio progetto???".

Per me è giusto far sedere una vecchietta in metro o in autobus quando tutti gli altri posti sono occupati. Se io sono in piedi ed un giovane ragazzo è seduto proprio davanti a lei e non si alza, potrei prenderlo a male parole ma di certo non posso chiamare la polizia per farlo arrestare. Perchè no, un giorno spero faranno una legge in cui si affermerà che le persone anziane avranno il diritto di sedersi facendo alzare i "giovanotti agili e forti". Ma quel giorno non è ancora arrivato. Arriverà? Si spera. Se non arrivasse mai? Vuol dire che quella legge non ha necessità di esistere.

Spero che tutti voi abbiate capito la metafora.

astrobeed: Belle parole che però cozzano con il mondo reale, quando si parla di prodotti tocca pararsi le terga in tutti i modi. C'è gente che con il codice che scrive ci mangia e dà da mangiare alla famiglia, hanno tutti i diritti di difendere il loro lavoro ed evitare che i soliti furbetti rubano il loro lavoro per poi spacciarlo come proprio.

Quoto, niente da aggiungere. Passo e chiudo.

concordo con te tranne sul fatto di interpellare Arduino chiedendogli di cambiare licenza. Il movimento free software, che e' qualcosa di eticamente piu' importante del mero concetto di opensource, vuole essere appunto free, libero, non limitando in nessun modo le liberta' di tutti. Nel tutto c'e' incluso anche il produttore, ed obbligarlo al rilascio del codice sarebbe una limitazione della sua liberta', non un incremento. E' invece l'utente che deve fare la scelta giusta, tu apple non rilasci i sorgenti del tuo sistema operativo ? non ti compro, perche' io utente non rinuncio alle 4 liberta' fondamentali enunciate da Stallman.