Distribuire programmi Arduino in forma compilata

Sto cercando un modo per distribuire un programma fatto per Arduino, ma in modo che non sia più possibile modificarlo.

Con gli altri linguaggi esistono le sorgenti in chiaro che restano al proprietario del software ed i compilati che si utilizzano per la distribuzione, ma con Arduino si deve caricare la sorgente in chiaro, pertanto si deve distribuire la sorgente, con tutti i rischi di copiatura e di alterazioni.

La domanda è: esiste un modo per generare sul PC un file già compilato ed auto installante su Arduino ?

Una scomoda, ma possibile soluzione, forse potrebbe essere quella di usare lo stesso Arduino come programmatore di microprocessore, acquistando dei micro vergini o quasi, tipo gli "ATmega328 with Arduino Bootloader"
su http://www.robot-italy.com/product_info.php?cPath=1_119_153&products_id=1162 per poi montarli su un Arduino, programmarli nel solito modo e poi toglierli per distribuirli.

Sapete di altre soluzioni possibili ?

Cordiali saluti

Puoi compilare il programma esternamente dall'IDE, in modo da ottenere un file .hex che puoi distribuire.
Però in questo modo obblighi la gente a:

  1. Arduino 2009: a modificare l'Arduino per poter programmare il file sul microcontrollore;
  2. Arduino Uno: a comprarsi un programmatore per poter programmare il micro.

In ogni caso le persone devono avere una certa esperienza con questo tipo di operazioni (non quella necessaria per infilare 1 led nei pin dell'Arduino), non sono alla portate di tutti.

Infine, un piccolo parere personale:
NON concordo assolutamente con questo atteggiamento perché stai sfruttando una piattaforma OPEN-SOURCE per produrre un progetto CLOSED SOURCE. Puoi farlo ma eticamente NON è corretto.
Quindi ti consiglierei di non usare Arduino ma di rivedere il tuo progetto per far usare ai tuoi utenti gli Atmega senza metter nel mezzo Arduino.
Poi questo è IMHO.

Non è sbagliato che tu voglia guadagnare dal tuo lavoro e mantenerne i diritti, anzi ne hai il pieno diritto.
Però arduino è una comunità prima che una scheda, nella quale anche un neofita come me ha trovato chi lo consigliasse senza pretendere niente in cambio, e forse un giorno potrò fare altrettanto.

Se il valore aggiunto che sai infondere ai tuoi progetti è tale da conferire loro un valore economico e da farti preferire una distribuzione proprietaria, che bisogno hai di appoggiarti, senza offesa ma in modo parassita, a una piattaforma cui le persone si dedicano con la filosofia opposta?

Per esempio la Apple distribuisce software proprietari al punto che devi acquistare il loro hardware per farli girare, però li sviluppa da sola e li vende a chi ritiene siano migliori rispetto a sistemi aperti come linux o chromium o chiusi anch'essi come quelli microsoft, ed è disposto a pagarli il doppio di quanto non chieda la concorrenza.

ps:scrivo da un macbook pro.

Già avevo aperto la discussione sul vecchio forum: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1295680111

Nel mio caso la necessità era quella di realizzare strumenti che utilizzano arduino da distribuire a coloro che lo utilizzano, che trovano giovamento dal mio lavoro, ma che non sono in grado di poter aggiornare il firmware.

Nel mio caso ad esempio voglio realizzare strumentazione meteorologica e consentire anche ad altri appassionati di poterne usufruire, e poter istallare aggiornamenti in maniera facile!

Vi chiedo di concentrarvi su ciò che fanno aziende che hanno scelto l'opensource non solo per il software ma anche per l'hardare, vendendo prodotti propri o derivati da altri progetti nati in una comunità "open".

  • Hackvision:
    console giochi basata sulla libreria TvOut, nata all'interno della comunità di Arduino. Il produttore vende le schede già assemblate ma mette online anche tutti i sorgenti, sia dei giochi sia del PCB, in modo che chi vuole acquistare un oggetto "bello e ben fatto", compra la scheda, altrimenti (come me che l'ho replicato su una breadboard :smiley: ) se la costruisce da solo
  • TellyMate:
    shield per Arduino che permette di inviare dell'output ad una TV. Il firmware dell'Atmega è disponibile sia precompilato che in formato di sorgenti, compresi i giochi e le demo. Tutto è scaricabile, compresi gli schemi, ma anche acquistabile
  • uzebox:
    console giochi basata sull'Atmega644 i cui schemi sono liberamente accessibili, i giochi sono in formato hex oppure scaricabili come sorgente, tutto è accessibile e modificabile. Ovviamente è anche tutto acquistabile se uno non ha le capacità/conoscenze per farsela da soli.

Questo è lo spirito dell'open source. Far soldi sì ma anche permettere agli altri di accedere in maniera totale a ciò che vendi.

secondsky:
Per esempio la Apple distribuisce software proprietari al punto che devi acquistare il loro hardware per farli girare, però li sviluppa da sola e li vende a chi ritiene siano migliori rispetto a sistemi aperti come linux o chromium o chiusi anch'essi come quelli microsoft, ed è disposto a pagarli il doppio di quanto non chieda la concorrenza.
ps:scrivo da un macbook pro.

E giusto per fare un po' di flame, non si capisce come mai solo M$ sia bersagliata dall'antitrust. Forse perche' Jobs va a cena col presidente?

Va beh, ma anche solo quando compri la scheda arduino stai pagando per qualcosa che potresti farti da solo con gli schemi on-line.
Invece scegli la qualità delle componenti già assemblate se vuoi, o in altri casi la bellezza della fattura.
Ma questo è molto diverso da voler vendere prodotti chiusi e proprietari, compilati però sull'IDE che scarichi gratis sul sito, sviluppata grazie alla ricerca di una comunità open source.
Non è che danneggi direttamente quella comunità, ma se tutti facessero così questa realtà non esisterebbe.

Un conto è fregarsene degli altri e continuare per la propria strada (Apple), un conto è cercare di imporre agli altri le proprie scelte solo perché si controlla la stragrande maggioranza dei computer (Microsoft).

Pensa anche all'obbligo che hanno i produttori di computer di dover abbinare Windows ad ogni computer venduto. Anche se nel tempo qualcuno ha fatto causa ed ha vinto la causa facendosi rimborsare i soldi del SO non voluto/usato, la cosa continua anche ai giorni nostri. Pensa, io sono uno di quelli che quando acquisto un PC, la prima cosa che faccio quando arrivo a casa è quella di brasare via Windows ]:smiley:
L'ultimo Windows che ho visto è XP, poi gli altri successivi (Vista e 7) non so neanche come sono fatti :wink:

Per finire, un link che dice tutto:
Abbraccia, estendi ed estingui
Estingui!! Capito in cosa consiste la tattica Microsoft?

Federico:

secondsky:
Per esempio la Apple distribuisce software proprietari al punto che devi acquistare il loro hardware per farli girare, però li sviluppa da sola e li vende a chi ritiene siano migliori rispetto a sistemi aperti come linux o chromium o chiusi anch'essi come quelli microsoft, ed è disposto a pagarli il doppio di quanto non chieda la concorrenza.
ps:scrivo da un macbook pro.

E giusto per fare un po' di flame, non si capisce come mai solo M$ sia bersagliata dall'antitrust. Forse perche' Jobs va a cena col presidente?

Effettivamente è un po' di flame :slight_smile:
Sinceramente credo che a quel tavolo, la microsoft, avrebbe potuto portare solo la forfora.
Ma potrebbe anche saltar fuori che la apple non è un trust. (File:Operating system usage share.svg - Wikipedia)

Forfora? Siamo convinti davvero che a quel tavolo ci fosse l'eccellenza??
Ci saranno stati quelli che si sono arricchiti ultimamente, non quelli davvero fighi, a mio avviso.

Federico:
Forfora? Siamo convinti davvero che a quel tavolo ci fosse l'eccellenza??
Ci saranno stati quelli che si sono arricchiti ultimamente, non quelli davvero fighi, a mio avviso.

ah ma è closed?
Si perchè?

Ok ficcatelo su per il c..o
Sogno un giorno di poterlo dire a qualcuno che se lo merita.

Apparte gli scherzi, questa è la dimostrazione che il conforto di una comunità open ci permette di rispondere in modo logico, spiegando i risvolti negativi e che noi abbiamo le nostre idee e siamo in tanti, e che ammeno di aver sviluppato un codice che hai paura che qualcuno te lo rubbi perchè diversamente nessuno saprebbe fare di meglio. Ma allora non si capisce perchè scrivi qui, dove una manciata di "sfigati" che crede nell'open source e open hardware (vedi conferenza sull'open hardware tenuta da ladyada alias adafruit, su youtube) e impara dagli altri, impara a compilare da riga di comando gli sketch dopo aver studiato i sorgenti dell'ide di arduino. Io se non avessi letto quanto detto da altri, ti avrei mandato li...., a ripetizione, ma imparo anche il comportamento civile e modero la mia furia che vuole a tutti i costi uscire e farti sentire piccolo e insignificante.

Era solo uno sfogo, faccio fatica a non aggredire quando leggo post come quello in oggetto. Io dico fai quello che vuoi ma non venire a chiedere la soluzione a me, cioè io dovrei dire come si compila uno sketch senza arduino ad uno che ottenuto ciò che voleva poi scompare oppure chiede senza contribbuire ad accrescere la conoscenza, non se ne parla, non posso parlare per tutti ovviamente ma qui siamo tutti cazzuti, mica fessi.

Ciao.

Scusate un momento, ma vorrei ritornare al problema che avevo posto e, sopratutto, vorrei chiarire che il motivo della mia richiesta non è tanto il guadagno che potrei fare vendendo un mio software, visto che ho quasi 70 anni, una buona pensione ed alla mia tenera età non ho certo voglia di simili avventure.
No, quello che mi scoccia è che distribuendo un software aperto chiunque lo può copiare e poi, effettivamente, commercializzarlo a suo nome.
Lo so che è lo stesso problema che ha avuto Arduino, ma almeno il suo nome è brevettato e così nessuno può mettere in dubbio che il merito della scheda va a Banzi ed ai suoi collaboratori e non certo ai produttori di tutti gli altri "....ini" che troviamo in commercio.

Ma un software del genere non vale certo la pena brevettarlo, ecco perché vorrei poterlo distribuire gratuitamente, ma in modo che mantenga la sua originalità.

Cordiali saluti

Si tratta di un problema diverso allora.
Il tuo e' un problema di licenza.
Ci sono queste "licenze" che tu puoi usare banalmente dicendo che usi questa licenza e che tutelano il tuo lavoro, puoi rilasciare codice sotto una grande varieta' di licenze che dicono le cose piu' svariate.

Esempi?
Che il tuo codice e' liberamente usabile solo se usato per scopi non di lucro
oppure che il tuo codice puo' essere modificato solo se mantiene la sua liberta' e solo se e' specificato che tu sei l'autore originale
ecc ecc

Ce ne sono tante percui troverai di sicuro quella che torna comoda a te. Gpl, Bsd, Apache, lgpl etc

In particolare per il tuo problema del primo post (che a mio avviso non si pone se ti tuteli legalmente tramite l'utilizzo di licenze) potresti distribuire, se vuoi, il codice hex e poi sono cavoli di chi se lo vuole caricare (allega istruzioni al limite)

Enotria ci sono 2 soluzioni che mi vengono in mente subito:
la prima è che l'atmega possiede dei fuse, se non erro puoi rendere il codice sull'atmega illeggibile e immodificabile. Quindi carichi il programma e "bruci" i fuse, anche se dubito che qualcuno con le conoscenze per recuperare uno sketch già caricato da arduino si metta a fare questa cosa, salvo che il tuo programma non sia veramente un codice da NASA

La domanda è: esiste un modo per generare sul PC un file già compilato ed auto installante su Arduino ?

più o meno.
quando uppi il codice di arduino quello che succede è il seguente:

  1. arduino IDE compila i sorgenti
  2. arduino IDE carica i sorgenti

entrambe le fasi puoi farle da riga di comando, per la compilazione usando avr-gcc(già compreso nell'arduino IDE in windows, da installare a parte (salvo pacchetti precotti) in linux e mac)
per l'upload non ricordo ora il programma.

Quello che tu dovresti fare è compilare il codice usando avr-gcc, e poi distribuirlo con un piccolo programmino che esegue il punto 2 usando i tuoi sorgenti. Sinceramente non so se puoi applicare anche l'offuscamento del codice (per evitare una decompilazione), ma credo di sì.

sicuramente, comunque se il codice è da NASA stai tranquillo che si può comunque decompilare in assemby e risalire (più o meno) al codice originale.

Anche io sono contrario al codice source-closed, in italia esiste una cosa chiamata "proprietà intellettuale" secondo cui nessuno può rubare di sana pianta una tua idea, ovviamente devi avere un modo per rendere univoca la data di creazione della stessa.
Per esempio ho letto da qualche parte (quindi da verificare) che puoi masterizzare (su un cd NON rescrivibile) il tuo codice, metterlo in una busta e rispedirtelo come raccomandata. La raccomandata fa fede sulla data, ovviamente la busta NON deve essere aperta e portata intonsa come prova dal giudice..
Oppure più semplicemente puoi rialsciare il codice come GPL: lo uppi su un sito come sourceforge o googlecode (che fanno fede in quanto testimoni al di sopra delle parti), e nessuno può copiarti il codice, al massimo lo può modificare (ma se non erro DEVE mostrarti le modifiche e citarti come autore originale)
comunque esistono un sacco di licenze open, sicuramente puoi trovare quella più adatta a te

Leggendo i vostri suggerimenti, direi che la soluzione giusta per me sia l'utilizzo di una licenza open che mi permetta di pubblicare sul mio sito la sorgente in forma aperta, ma protetta da una licenza che consenta ogni riproduzione o modificazione, purché citando la fonte.

Ora vedrò di informarmi meglio, spero non costi molto ! : :wink:

Grazie a tutti

ricordati di postare il codice anche su un sito attendibile e valido legalmente come sourceforge, altrimenti non vale molto come prova

@lesto:
i "fuse" non si bruciano. E non rendono il codice nel uC illeggibile.
Sono solo dei bit di registri che vengono impostati affinché il codice possa non essere sovrascrivibile con un upload di un altro sketch.
Cmq basta un programmatore per modificare i fuse.

@Enotria:
non puoi impedire in nessun modo la copia, anche perché una licenza non impedisce a nessuno "fisicamente" la copiarti il lavoro.
Io posso prendere un Atmega programmato da te, estrarne il codice e riversarlo su un altro Atmega, rivendendo il tuo programma in modo fraudolento. Se faccio questo all'estero, dove non vale la legge italiana sul diritto d'autore (perché qui in Italia non abbiamo il copyright americano), sei fritto.
Ecco allora la forza dell'open source. Dai subito il codice a tutti ma con una licenza riconosciuta in più stati che tuteli la tua persona come autore del software e detentore su di esso di alcuni "diritti".
Io ti consiglio la Creative Commons (CC), che è quella che meglio unisce i diritti dell'autore ai doveri che chiedi ai tuoi utenti.

leo72:
@Enotria:
non puoi impedire in nessun modo la copia, anche perché una licenza non impedisce a nessuno "fisicamente" la copiarti il lavoro.
Io posso prendere un Atmega programmato da te, estrarne il codice e riversarlo su un altro Atmega, rivendendo il tuo programma in modo fraudolento. Se faccio questo all'estero, dove non vale la legge italiana sul diritto d'autore (perché qui in Italia non abbiamo il copyright americano), sei fritto.
Ecco allora la forza dell'open source. Dai subito il codice a tutti ma con una licenza riconosciuta in più stati che tuteli la tua persona come autore del software e detentore su di esso di alcuni "diritti".
Io ti consiglio la Creative Commons (CC), che è quella che meglio unisce i diritti dell'autore ai doveri che chiedi ai tuoi utenti.
Creative Commons - Wikipedia

Volendo fare così, in quest'ottica, chi produce queste fantomatiche schede con codice prodotto da se ma distribuito come open source, cosa puo' guadagnarci? cosa puo' ricaricare? Il tempo perso per progettare? Le spese? Cosa è lecito, moralmente giusto, rispettando l'open source, ricaricare su un prodotto sviluppato con arduino con sw opensource?

Secondo me è una legge di mercato. Se chiedi "troppo" rispetto al costo del materiale più il giusto compenso per il tempo perso, è il mercato che, "eticamente", ti boccia il prodotto.

Difatti i guadagni si fanno con la grande distribuzione, non spremendo come limoni i classici 4 gatti che acquistano un prodotto. Un costo basso invoglia all'acquisto, uno alto limita la diffusione. Io ho comprato Arduino perché:

  1. all'inizio (ma anche ora... XD ) non avevo le capacità per farmi un PCB doppia faccia;
  2. non avrei saputo dove comprare i componenti e come sceglierli;
  3. volevo divertirmi da subito.
    Il costo era ragionevole ed ho investito quei 26€ (mi pare) più che volentieri. Se Arduino fosse costato 50€ non l'avrei MAI comprato.