5. Gestió de components¶
5.1. Cerca i selecció de components de codi obert¶
A no ser que la nostra necessitat sigui molt especialitzada, és probable que ja existeixi una solució lliure (o combinació de solucions) que resolgui el problema, com a mínim en part.
Cal tenir en compte que els projectes de codi obert ofereixen més possibilitats de transformació i adaptació a les nostres necessitats que les aplicacions tradicionals.
Conèixer si un projecte s’adequa a les nostres necessitats i compleix amb els mínims exigibles a nivell tècnic, legal i social pot resultar costós. Però els beneficis de trobar un projecte existent al que sumar-se, enlloc d’inventar novament la roda (i evitar l’anomenat síndrome «Not invented here, NIH») poden ser extraordinaris, tant a curt com a llarg termini:
- Pot ser que d’entrada moltes de les funcionalitats que necessitem ja estiguin implementades, i puguem construir molt ràpidament prototips i proves de concepte.
- Podem beneficiar-nos de l’experiència adquirida per altres usuaris que ja han intentat implantar un sistema semblant al que volem, potser descobrint oportunitats que no havíem pensat.
- Podem compartir la despesa de construir una eina complexa amb d’altres usuaris i entitats. Això inclou potencials futures funcionalitats i ampliacions, que poden interessar també a d’altres usuaris.
- Si el producte té una base d’usuaris suficients, obtenim una eina que evoluciona en el temps, millorant amb les aportacions d’altres parts, adaptant-se a futurs canvis tecnològics, incorporant noves funcionalitats nostres o de tercers. Amb molt poca despesa en manteniment obtenim sostenibilitat a llarg plaç i una reducció del perill de crear deute tecnològic.
- Mesura: Buscar un projecte o component existent que resolgui el problema, potser parcialment M_323
- tags: Avantprojecte Integració Adaptació Plugin NouProductelinks incoming: Nonelinks outgoing: None
A més de fer servir dels motors de cerca habituals, convé buscar directament a llocs com:
- GitHub
- Freshcode.club
- OpenHub
- Repositori de solucions de la iniciativa Joinup de la UE
- Cercador de solucions del Centro de Transferencia de Tecnología
Depenent de la plataforma o arquitectura tecnològica amb la que es treballi, també cal cercar en repositoris especialitzats, tals com:
- Repositori de Drupal
- Repositori de CKAN
- Mesura: Omplir una graella comparativa dels diferents components a avaluar per cobrir una necessitat M_408
- tags: Avantprojecte Integració Adaptació Plugin NouProductelinks incoming: None
Això pot haver-se de repetir per cadascun dels components d’un sistema.
Exemple de graella:
Element Component A Component B Component C Nom Llicència (i condicions que ens poden afectar) % de la funcionalitat que necessitem Projectes IMI que ja l’utilitzen i persones familiaritzades Suport comercial Altres organitzacions grans que l’utilitzen Activitat al bug tracker Diversitat de commits Diversitat d’organitzacion s To i utilitat dels fòrums de discussió Comunicació pública del projecte Mètriques de qualitat del codi Altres consideracions Altres coses que es poden tenir en compte, a més de les sub-mesures de més avall:
- Facilitat d’adaptació i evolució dels diferents components
- Cost immediat i cost a llarg termini, incloent els costos de sortida
- Existència d’una comunitat informal o xarxa de suport local i global
- Solucions innovadores (i valor que això aporta)
- Impacte sobre la privacitat i la sobirania de dades
- Submesura: Triar components amb una llicència aprovada per la OSI o per la FSF S_58B
-
Els dos conjunts de llicències vàlides son gairebé idèntics:
- Submesura: Afavorir components amb una major diversitat i pes dels contribuïdors S_453
- tags: Avantprojecte Integració Adaptació Plugin NouProductelinks incoming: M_408links outgoing: None
Aquí entenem contribucions en un sentit ampli: commits al repositori de codi, bug reports, traduccions, etc.
És més important la diversitat (persones i entitats diferents que participen) que la quantitat de les contribucions (per exemple, nombre de commits per mes).
Si el component presenta contribucions per part d’organitzacions importants (empreses d’una certa mida, universitats, institucions), és més probable que encara que algun dels contribuïdors falli el projecte continuï. Però també pot ser molt bona senyal que moltes persones a títol individual facin contribucions i que es tinguin en compte.
- Submesura: Afavorir components amb activitat recent S_223
- links incoming: M_408links outgoing: None
Primer de tot cal mirar l’activitat al bug tracker, observant:
- Quantitat de notificacions de deficiències. No ens ha d’espantar que hi hagi moltes notificacions obertes i no resoltes, el nombre d’incidències tendeix a créixer linealment amb el nombre d’usuaris, però en canvi el nombre de desenvolupadors acostuma a créixer més lentament.
- Que els desenvolupadors estiguin responent a les incidències. Insistim: si el nombre d’usuaris és gran, hi haurà sempre moltes incidències obertes, però sí és important observar que els desenvolupadors participen habitualment al bug tracker, que no l’hagin abandonat.
Després cal mirar l’activitat pública del projecte, tenint en compte:
- Antiguitat de les darreres releases públiques, notícies publicades en forma de blog o similar.
- El to, la utilitat i la diversitat de participants en el fòrums de discussió i canals de comunicació públics del projecte.
- Submesura: Afavorir components amb una documentació complerta i al dia S_5BD
- links incoming: M_408links outgoing: None
Que la documentació estigui en un repositori públic i que hi hagi una bona diversitat de persones que hi contribueixin també és un molt bon senyal.
- Submesura: Afavorir components per als quals existeixi suport comercial S_160
- tags: Avantprojecte Integració Adaptació Plugin NouProductelinks incoming: M_408links outgoing: None
En productes amb llicència lliure sempre serà possible contractar algú per tal que els modifiqui, mantingui o resolgui problemes. No obstant això, obtenim una major garantia d’èxit si ja existeixen empreses o persones que ofereixen suport professional sobre el component en qüestió, i que per tant cal assumir que el coneixen bé.
És millor que hi hagi diferents empreses oferint serveis comercials sobre el producte que no només una, ja que en aquest segon cas incorreríem en una dependència més forta cap a aquests empresa. És habitual un model de negoci en el que la mateixa empresa que desenvolupa el producte (potser sense gaire suport comunitari extern) ofereix també suport comercial sobre el mateix. No s’ha de descartar de per sí, però és millor que el suport professional es trobi diversificat.
L’existència d’empreses que ja d’entrada ofereixen serveis professionals sobre un producte pot facilitar també realitzar una avaluació temptativa del cost que suposarà adaptar-lo o mantenir-lo.
- Submesura: Afavorir components que facilitin l’accés a la informació sobre el desenvolupament i la instal·lació S_0F3
- tags: Avantprojecte Integració Adaptació Plugin NouProductelinks incoming: M_408links outgoing: None
La transparència és un pilar bàsic dels projectes de programari lliure, sense el qual és molt difícil que tota la resta funcioni bé.
Que un component ofereixi instruccions detallades i precises do com instal·lar-lo facilita que es pugui fer una avaluació tècnica independent del mateix.
- Submesura: Afavorir components amb bones mètriques de qualitat del codi S_1C4
- tags: Avantprojecte Integració Adaptació Plugin NouProductelinks incoming: M_408links outgoing: None
El fet que tant el codi com les eines de gestió de projectes (bug-trackers, llistes de correu, fòrums) siguin públiques fa que sobre els projectes de programari lliure sigui possible extreure algunes mètriques objectives molt difícils d’aconseguir en el cas de programari privatiu.
Algunes mètriques que es poden obtenir per certs projectes:
- Quantitat de comentaris, a OpenHub.
- Percentatge de codi cobert pels casos de prova.
- Submesura: Afavorir components amb els que l’IMI ja ha adquirit familiaritat S_24A
- tags: Avantprojecte Integració Adaptació Plugin NouProductelinks incoming: M_408links outgoing: None
Quan necessitem adaptar un component de codi obert ja existent, conèixer per endavant el projecte i la comunitat que el sustenta presenta molts avantatges:
- Pot ser que l’IMI tingui ja identificades persones clau dins la comunitat.
- Es pot fer una estimació més realista del cost en temps i en diners de les modificacions que es pretén fer, i de les possibilitats que siguin integrades al producte original.
- Submesura: Afavorir components amb una llicència compatible amb la GPL S_79A
- tags: Integració Adaptació Pluginlinks incoming: Nonelinks outgoing: None
Aquesta informació la dona la Free Software Foundation al seu llistat de llicències: https://www.gnu.org/licenses/license-list.en.html.
Les llicències de la família de la GPL son unes de les més comunes. Per evitar conflictes de llicència amb altres components que possiblement necessitarem, convé que tots els nostres components siguin compatibles amb GPL.
- Submesura: Afavorir components que formin part de la distribució estable de Debian S_2F1
- tags: Avantprojecte Integració Adaptació Plugin NouProductelinks incoming: M_408links outgoing: None
Tot component de la solució que estigui inclòs en la distribució Estable de Debian en el moment de dissenyar el projecte, o que es pugui executar sobre Debian Estable sense necessitat d’adaptació, i que sigui multi-arquitectura, es considera un component durador i fiable.
Si més no, afavorir components que puguin executar-se, en la seva versió estàndard descarregable a la web del projecte, sobre plataformes lliures, preferiblement GNU/Linux i sense que existeixin restriccions en quant a:
- Requerir una distribució particular de GNU/Linux (per exemple un programari que només s’executi en entorns CentOS i no sobre Debian).
- Versions massa específiques dels elements principals de la plataforma, sobretot si es tracta de versions massa antigues o fora del seu període de manteniment estàndard (per exemple un programari que requereixi un kernel de Linux en una versió 3.*, o unes llibreries bàsiques del sistema desfasades).
- Requerir una arquitectura de hardware específica (per exemple, solucions que només s’executin en màquines Intel).
- Mesura: Considerar totes les possibilitats i totes les implicacions abans d’iniciar un fork social M_B61
- tags: Avantprojecte Adaptació NouProductelinks incoming: Nonelinks outgoing: None
Quan es disposa d’un codi que ha estat publicat amb llicència lliure però es necessita evolucionar el producte en una direcció incompatible amb els plans de qui governa el projecte, pot ser necessari fer un fork (en el sentit fort del terme, o «fork social»).
Fer un fork té molts inconvenients, i per tant ha de ser un últim recurs. D’una banda, dificulta molt compartir codi amb el producte original a partir del moment del fork. I potser més significatiu, suposa dividir la comunitat original i obligar a cada desenvolupador a decidir quin projecte prioritza.
5.2. Gestió de dependències¶
- Mesura: Dur un registre exhaustiu de tots els paquets de programari utilitzats, que han de ser lliures M_0C2
- tags: Contractar Integració Adaptació Plugin NouProducte Publicaciólinks incoming: Nonelinks outgoing: None
En cas de contracte, posar-ho als plecs i afegir que l’IMI té l’última paraula sobre la inclusió d’una dependència.
Exemple de clàusula: Gestió de les dependències de programari.
L’adjudicatari durà un registre exhaustiu de tots els paquets de programari utilitzats en la solució, que han d’estar distribuïts sota una llicència de programari acceptada per la Open Source Initiative (OSI, https://opensource.org/licenses) o bé pel projecte GNU (https://www.gnu.org/licenses/license-list.en.html). Com a requisit addicional, la llicència de tots els paquets utilitzats no ha de produir problemes d’incompatibilitat amb la llicència principal del producte, la EUPL-1.2. L’Ajuntament de Barcelona es reserva la potestat d’exigir que es retiri una dependència de programari del producte si considera que pot constituir un risc legal i l’adjudicatari està obligat a substituir el paquet per un altre, o bé cobrir la funcionalitat amb desenvolupament propi.
- Recomanació: Utilitzar un programari de monitorització de llicències R_5D2
- tags: Integració Adaptació Plugin NouProducte Publicaciólinks incoming: Nonelinks outgoing: None
Com per exemple:
- Mesura: No copiar dependències externes al repositori si no és per una causa excepcional M_582
- tags: Plugin NouProducte Publicaciólinks incoming: Nonelinks outgoing: None
A vegades es decideix copiar un sub-component que es troba disponible en un repositori propi al repositori del component que estem construint (sigui en forma de codi font, binari o de bytecode). Es diu que aquesta dependència es troba bundled. A vegades es busca amb això un desplegament o un cicle de desenvolupament més senzill, però es considera una mala pràctica ja que:
- Els canvis i actualitzacions en el sub-component embruten la història de canvis del component principal.
- És més difícil donar compte correctament de la autoria i llicenciament de cada part del codi.
Poden donar-se circumstàncies excepcionals que justifiquin no obeir aquesta mesura.
- Mesura: Buscar les dependències inadequades i trobar substituts amb llicència lliure M_CA0
- tags: Publicaciólinks incoming: Nonelinks outgoing: None
S’han d’eliminar els components:
- Amb llicència propietària.
- Propietat de l’Ajuntament de Barcelona, però que de moment no es puguin obrir.
- Que presentin algun tipus d’incompatibilitat de llicència amb altres components del producte a obrir.
- Que no puguin ser instal·lats en un sistema operatiu lliure.
- Recomanació: Finançar una auditoria de seguretat del component a utilitzar R_377
- tags: Integració Adaptació Pluginlinks incoming: Nonelinks outgoing: None
- Recomanació: Finançar trobades i hackatons relacionades amb el component a utilitzar R_D16
- tags: Integració Adaptació Pluginlinks incoming: Nonelinks outgoing: None
- Recomanació: Integrar personal de l’IMI en les tasques de desenvolupament R_BBA
- tags: Contractar Integració Adaptació Plugin NouProductelinks incoming: Nonelinks outgoing: None
Es pot establir per contracte i pot ser qualsevol tasca relacionada amb el desenvolupament:
- Escriptura de codi
- Escriptura de documentació
- Revisions de codi
- Creació, execució i anàlisi de bateries de proves
L’objectiu és tenir personal propi familiaritzat amb un programari que es seguirà utilitzant en el futur, un cop s’acabi el contracte de desenvolupament actual. Es tracta d’aprofundir en la sobirania i evitar el màxim la dependència de proveïdors únics.
5.3. Substitució de serveis privatius habituals¶
- Mesura: Utilitzar Piwik (si es necessita una eina d’analítica web) M_116
- tags: Contractar Integració Adaptació Plugin NouProducte Publicaciólinks incoming: Nonelinks outgoing: None
No utilitzar Google Analytics. Utilitzar eines com Piwik en el seu lloc.
- Mesura: Publicar apps Android a F-Droid (Si un dels productes és una app Android) M_CDB
- tags: Integració Adaptació Plugin NouProducte Publicaciólinks incoming: Nonelinks outgoing: None
En el cas d’apps per la plataforma Android, publicar les apps al repositori lliure F-Droid, a més del repositori Google Play o aquells que més gent utilitzi.
- Mesura: Utilitzar OpenStreetMap (si es necessita presentar informació cartogràfica present en aquesta eina) M_600
- tags: Contractar Integració Adaptació Plugin NouProducte Publicaciólinks incoming: Nonelinks outgoing: None
No utilitzar Google Maps.