Software libero: Cosa c’è nel codice di Spotify?

Mi piace molto curiosare tra le librerie libere presenti in grossi progetti, oggi curioso un po’ su Spotify,  il servizio che offre la possibilità di ascoltare brani musicali di case discografiche ed etichette indipendenti.

Spotify

Spotify è disponibile sia con un account gratuito che premium, la versione premium consente di ascoltare la musica con una qualità maggiore e senza pubblicità.
Il servizio vanta oltre gli 140 milioni di utenti attivi, di questi oltre 50 milioni a pagamento.

Spotify è diffuso in quasi tutto il mondo, nella maggior parte dei paesi d’Europa, in quasi tutti gli stati delle Americhe, Australia, Nuova Zelanda e in molti stati dell’Asia.

Attualmente è possibile utilizzare Spotify su: Microsoft Windows, macOS, GNU/Linux (solo Debian e Ubuntu, senza supporto tecnico), Telia Digital-tv e i dispositivi mobili equipaggiati con iOS (iPod/iPhone/iPad), Android, BlackBerry (in versione beta limitata), Windows Mobile, Windows Phone, S60 (Symbian), webOS, Squeezebox, Boxee, Sonos, Playstation 4, WD TV e MeeGo.

La storia di Spotify

Vediamo i punti che hanno fatto la storia di questo servizio:

  • Dal 2006 partì lo sviluppo del progetto da parte di Daniel Ek e Martin Lorentzon;
  • La prima pubblicazione fu nel 2008 in Svezia e in Regno Unito;
  • Nel 2009 furono introdotti gli account a pagamento, partendo dal Regno Unito;
  • Nel 2010 il World Econimic Forum ha conferito il titolo di Technology Pioneer;
  •  Il 2011 fu l’anno del lancio negli Stati Uniti;
  • Prima del 2014 vennero eliminati tutti i limiti di tempo nella versione gratuita;
  • Nel 2015 venne pubblicata la versione per PlayStation 4;

Lo sviluppo

Come tutte le grandi piattaforme è stato sviluppato con diversi linguaggi di programmazione. Tra i linguaggi e le tecnologie più usate in questo progetto, possiamo trovare C/C++, Cassandra, Docker, Java, JavaScript, Objective-C, Python e Ruby.

Dall’account ufficiale di GitHub è possibile consultare l’elenco delle librerie rilasciate sotto licenze libere.

C/C++

  • annoy (Apache 2.0): libreria in C++ per la compilazione in Python;
  • echoprint-codegen (MIT, e LGPL): una libreria per l’utilizzo di Echoprint (una valida alternativa lato server a Shazam);
  • echoprint-server (Apache 2.0):una libreria per l’utilizzo di Echoprint;
  • jniHelpers (Apache 2.0): libreria per semplificare la progettazione e la scrittura di codice JNI (Java Native Interface);
  • spotify-json (Apache 2.0): libreria per la scrittura e il parser di dati in formato Json.

Cassandra

  • cassandra-opstools (Apache 2.0): serie di utility e script per la gestione di Cassandra;
  • cassandra-reaper (Apache 2.0): strumento per configurare, gestire ed eseguire le funzioni di ripristino per Cassandra;
  • hdfs2cass (Apache 2.0): libreria per l’adattamento ed il controllo dei dati per Cassandra.

Docker

Questa serie di librerie serve per l’integrazione con Docker, un progetto Open Source per l’automatizzazione del deployment di applicazioni.

  • docker-bigtable (Apache 2.0);
  • docker-client (Apache 2.0);
  • docker-kafka (Apache 2.0);
  • docker-maven-plugin (Apache 2.0);
  • docker-maven (Apache 2.0).

Java

  • android-auth (Apache 2.0): libreria per l’autenticazione del profilo Android;
  • android-sdk (Apache 2.0): libreria per lo sviluppo su Android;
  • apollo (Apache 2.0): libreria per lo sviluppo dei micro-servizi;
  • completable-futures (Apache 2.0): tools per la semplificare il lavoro del codice asincrono in Java8;
  • docker-client (Apache 2.0): libreria di integrazione con Docker per JVM;
  • docker-maven-plugin (Apache 2.0): plugin per il caricamento delle immagine su Docker tramite il software Maven;
  • dockerfile-maven (Apache 2.0): altro plugin per Maven;
  • ffwd (Apache 2.0): libreria per lo studio delle statistiche sulle prestazioni;
  • folsom (Apache 2.0): client per l’utilizzo asincrono di memcache;
  • futures-extra (Apache 2.0): libreria per l’integrazione con Guava;
  • helios (Apache 2.0): altro plugin l’integrazione con Docker per gestire le risorse tra i vari server;
  • heroic (Apache 2.0): un database basato su BigTable, Cassandra ed Elasticsearch;
  • JniHelpers (Apache 2.0): libreria per la progettazione e la scrittura di codice in JNI;
  • missinglink (Apache 2.0): tools per la ricerca di link orfani;
  • spydra (Apache 2.0): libreria per Google Compute Platform.

JavaScript

  • lingon (Apache 2.0): applicazione per reala realizzazione la composizione di pagine web.

Objective-C

  • HubFramework (Apache 2.0): framework per la gestione dei componenti delle interfacce per iOS;
  • ios-style ( CC BY):  wiki con linee guida e specifiche per realizzare in Objective-C su iOS;
  • ios-sdk (Apache 2.0): kit per la realizzazione di funzionalità su iOS;
  • SPStackedNav (Apache 2.0): pacchetto che include pannelli e menu nelle app iOS;
  • SPTDataLoader (Apache 2.0): libreria per l’invio di dati per i client Spotify su iOS;
  • SPTPersistentCache (Apache 2.0): libreria per l’implementazione della cache su dispositivi iOS.

Python

  • crtauth (Apache 2.0): sistema di autenticazione client/server tramite chiavi pubbliche;
  • dh-virtualenv (GPL V2): strumento per combinare i pacchetti debian con virtualenv ;
  • luigi (Apache 2.0): libreria per la gestione dei processi e i flussi di lavoro;
  • pyfg (Apache 2.0): sistema di API per FortiOS, per convertire FortiOS in JunOS;
  • pyeos (Apache 2.0): API Python per EOS;
  • pyschema (Apache 2.0): libreria per Python per la programmazione a oggetti;
  • ramlfications (Apache 2.0): parser RAML;
  • snakebite (Apache 2.0): libreria Python per HDFS.

Ruby

  • moob (ISC): client su riga di comando basato sul Web per interfacce HTTPS;
  • rspec-dns (Apache 2.0): plugin per test DNS.

Altro

  • git-test (Apache 2.0): sistema per la gestione e il test dei commit git;
  • scio (Apache 2.0): libreria per utilizzare Google Cloud Dataflow.

 

Altri articoli simili

Ho realizzato altri articoli sull’utilizzo di Open Source in grosse aziende: