E spesso il mercato degli "smanettoni" è troppo di nicchia per essere appetibile dalle grandi case...
<-<Samsung Galaxy Nexus GT-I9250>->
<-<Motorola Atrix 4G MB860 AT&T>->
<-<Samsung Galaxy S2 GT-I9100>->
<-<Logitech Revue with Google TV>->
<-<Creative ZiiO 7>->
<-<LG Optimus 3D P920>->
<-<Motorola Milestone A853>->
EX<-<Huawei Ideos U8150>->
EX<-<Samsung Galaxy S GT-I9000>->
EX<-<Motorola BackFlip MB300>->
EX<-<HTC Magic 32A - White>->
Sono abbastanza d'accordo con quello che dice. Ti posso dire le mie impressioni da sviluppatore (anche se non molto avanzato in campo "desktop").
Android ha il vantaggio di un sistema molto più omogeneo, in cui uno sviluppatore si trova a proprio agio. Fornisce molti servizi (audio, rete, motore di rendering web) utilizzabili con poche righe di codice. Le applicazioni sono multipiattaforma, non devi ricompilarle. E' molto semplice fare codice closed source che giri ovunque. Le applicazioni sono molto uniformi come interfaccia perché il SDK ti mette a disposizione molte cose già pronte. E` progettato fin dalle fondamenta per dispositivi mobili (schermi piccoli che ruotano, connettività che va e viene in diverse forme, dispositivi di input "particolari" come le dita o gli accelerometri, ecc.). Ha un sistema di protezione delle applicazioni una dall'altra (un'applicazione non può, a meno di root, toccare i dati di un'altra).
Maemo ha dalla sua le prestazioni. Essendo tutto compilato e non avendo una VM che ogni tanto si mette a fare garbage collection o che magari ti va in out of memory pur avendo 30-40 MB di "collectable garbage" da qualche parte, le applicazioni possono essere decisamente più efficienti.
Il porting di applicazioni esistenti si può fare fino a un certo punto. Ho usato lo Zaurus per 3 anni con applicazioni portate, e per certe cose è ai limiti dell'usabilità. Vedi Abiword con menu e finestre che non entravano nello schermo (poi è stato adattato con delle patch). Prestazioni paurose per un device da 400 MHz e 64 MB di RAM, ma usabilità bassa.
In pratica, le applicazioni, per funzionare bene, vanno riviste.
A livello di SDK, con Android hai veramente la pappa pronta. Anche lavorando da shell bastano 2-3 comandi per compilare un programma e farne un pacchetto installabile, mentre programmando in C hai tutta la rogna di autotools e automake che, onestamente, dopo oltre 10 anni di programmazione non ho ancora capito da che parte prendere. Non conosco direttamente Maemo, ma ho cercato di compilare qualcosa per Openembedded e ho rinunciato dopo giorni spesi a cercare di far andare la toolchain. L'sdk di Android mi ha funzionato dopo 20 minuti, e non avevo mai programmato in Java prima...
D'altro canto, con Maemo fai veramente quello che vuoi. Ti serve un daemon di sistema molto leggero che giri ogni 5 minuti e aggiorni un DB? Te lo scrivi e probabilmente occuperà 20-30 KB. Su Android probabilmente verrà killato ogni tanto dal sistema e ricaricato con tutta la sua VM e occuperà 1-2 MB, mettendoci di più a partire che a fare il suo lavoro, per quanto sia ottimizzata Dalvik.
Ti serve una procedura ultraottimizzata per l'OCR o per l'elaborazione in tempo reale di video o immagini? Te la scrivi e te la compili. In Android devi andare di NDK per farci una libreria e poi interfacciarla col resto del software via RMI (quindi strati di astrazione e quindi rallentamenti).
Ognuno dei due sistemi ha i suoi pregi e i suoi difetti.
Ti posso dire che da "piccolo programmatore" preferisco Android perché rende produttivi molto più velocemente, soprattutto per applicazioni "classiche" (più interfaccia che sostanza), ma se dovessi pensare a un'applicazione "di nicchia" (più sostanza e calcoli che interfaccia) penso preferirei Maemo.
La rogna di questa versione di Maemo è che sono passati alle Qt, che implicano:
- l'obbligo pratico di usare solo C++ (io conosco solo il C)
- l'obbligo di rivedere tutte le applicazioni scritte finora (ok, Gtk ci sarà ancora per un po', ma avere due toolkit caricati invece di 1 occupa più risorse, e probabilmente prima o poi lo toglieranno dal supporto ufficiale)
- l'impossibilità di usare linguaggi come Vala (che usando una sintassi simil-C# permette di sviluppare molto più velocemente senza perdere in prestazioni perché è compilato)
- rivedere tutta l'infrastruttura "instaurata" (cairo, pango, clutter, ecc.) che era basata su Gtk.
Bye.
Grazie mille per la tua analisi Shu!!!
Android since 05/12/2008
Follow me on TWITTER
Aggiungo soltanto che progettare un'applicazione che utilizza codice non managed (quindi non dietro una virtual machine) è moooooolto più complesso.
Si pensi al solo buffer overflow legato banalmente ad un controllo sbagliato o erroneo su un passaggio di parametro ad una funzione.
Tutti questi controlli, oggi, con codice managed (quindi dove la gestione della memoria è delegata alla Virtual Machine su cui gira) sono ininfluenti.
Scrivere applicazioni usando linguaggi managed è davvero più semplice e sopratutto la si conclude in tempi più rapidi (sia di sviluppo che di testing).
Qualsiasi cosa tu voglia scrivere.
Occuperà più memoria, potrà essere più lento e meno reattivo (ma dipende anche da come è scritta la VM), ma è decisamente una manna dal cielo.
Parlo da sviluppatore (anche su Mobile).
In Windows Mobile (è un esempio), per fare certe cose è necessario scrivere (e conoscere) sia .Net (Compact Framework in questo caso) che C++ (per le integrazioni forti con il sistema operativo). Secondo me con Android si è finalmente arrivati ad avere un SDK che è completamente integrato con tutto quello che il sistema operativo ti offre e difficilmente si dovrà scrivere qualcosa in C (con tutto quello che ne consegue).
Quindi tutto codice Managed, un solo linguaggio, un solo strumento di sviluppo e un solo testing.
Google Nexus One USA
ROM: CyanogenMod 6.1.1 - Android 2.2.1
Radio: 5.12.00.08
Recovery: Clockwork
Sviluppatore di: Swapper per utenti root | Modus Operandi
Ecco le mie app Android
Scusa il piccolo OT, ma non riuscivo a non scrivere
OSX è nato da FreeBSD è vero, ma recentemente è stato riconosciuto sistema standard UNIX (roba da non poco), ha sempre introdotto nuove tecnologie nel kernel (basta vedersi l'ultimo 10.6). E poi secondo te Linux cos'è? Niente di nuovo, un estremo rimodellamento del solito codice, come dici tu... ^^ aggiornamenti su aggiornamenti formano un kernel nuovo. Poi senza poterne vedere il codice non possiamo andare nei dettagli, ma ti assicuro che l'OSX di oggi ha poco a che fare con l'OSX di ieri
Innanzitutto LINUX è un Kernel... GNU/Linux e Android (oltre al WebOS per citarne un'altro celebre) sono sistemi operativi diversi che utilizzano lo stesso "nocciolo", chi con un sistema completamente nuovo (Android e WebOS) chi con uno più datato/collaudato e preesistente (GNU/Linux ovvero Maemo). Sinceramente, non afferro il senso della tua precisazione..
Ripeto, l'unico sistema veramente nuovo dei 3 da te citati è Android... Mentre OSX e Maemo sono sistemi che hanno origini molto "antiche" (se si può dire così parlando di informatica!). Il fatto che FreeBSD sia stato riconosciuto come aderente allo standard UNIX significa che ne rispetta le direttive, ma sinceramente non capisco cosa centri questo conl'innovazione e sopratutto con OSX, che è un sistema CHIUSO, pesantemente riadattato e castrato da Apple. In pratica un usato rimesso a nuovo e venduto come tale.
Android since 05/12/2008
Follow me on TWITTER