File: Software-Release-Practice-HOWTO

package info (click to toggle)
doc-linux-it 2000.01-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 8,136 kB
  • ctags: 19
  • sloc: perl: 249; makefile: 50; sh: 42
file content (462 lines) | stat: -rw-r--r-- 15,373 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
  Software Release Practice HOWTO
  Eric S. Raymond <esr@thyrsus.com>
  1.0, 21 novembre 1998

  Questo HOWTO descrive le regole di una buona release per un progetto
  open-source per Linux. Seguendo queste regole, si faciliter il pi
  possibile gli utenti nel costruire il codice e usarlo, e gli altri
  sviluppatori nel capirlo e cooperare per migliorarlo.  Questo docu
  mento  una lettura obbligata per i novelli sviluppatori. Gli svilup
  patori esperti devono fare una revisione quando stanno rilasciando un
  nuovo progetto. Verr riveduto periodicamente per mostrare le
  evoluzioni degli standard.  La traduzione italiana  stata curata da
  Edoardo Rampazzo <Taedium@mclink.it>

  1.  Introduzione


  1.1.  Perch questo documento?

  C' un gran numero di buone regole tradizionali per un codice open-
  source che aiutano gli altri nel portarlo, usarlo e cooperare nel suo
  sviluppo.  Alcune di queste convenzioni sono tradizionali nel mondo
  Unix e nei precursori di Linux; altre sono state sviluppate
  recentemente in risposta a particolari nuovi strumenti e nuove
  tecnologie come il World Wide Web.

  Questo documento aiuter ad acquisire queste regole. Lo stesso 
  organizzato in sezioni, ciascuna contenente un indice degli argomenti.
  Quest'ultimo servir anche come controllo preliminare ai fini della
  distribuzione.


  1.2.  Nuove versioni di questo documento

  Questo documento sar postato mensilmente nel newsgroup
  comp.os.linux.answers . Il documento  archiviato su diversi siti FTP
  riguardanti Linux, incluso sunsite.unc.edu in pub/Linux/docs/HOWTO.

  Si pu prendere visione dell'ultima versione di questo HOWTO sul World
  Wide Web all'URL <http://sunsite.unc.edu/LDP/HOWTO/Software-Release-
  Practice.html>.

  Si  autorizzati a spedire domande o commenti su questo HOWTO a Eric
  S. Raymond, esr@snark.thyrsus.com <mailto:esr@snark.thyrsus.com>.


  2.  Buone regole per dare un nome a un progetto e a un archivio

  Poich il carico sui distributori di archivi, come Sunsite, il sito
  del PSA e CPAN,  in aumento, si tende sempre pi a far processare le
  proposte da valutare in parte o completamente da dei programmi
  (piuttosto che interamente da una persona).

  Questo rende pi importante, per un progetto o un nome di un archivio,
  adattare bene i nomi a modelli regolari che il programma possa
  analizzare e capire.


  2.1.  Usare nomi nello stile GNU, con una radice e numerazione delle
  patch primarie.secondarie

   bene che tutti i file dell'archivio abbiano nomi sullo stile GNU:
  radice prefissante in caratteri tutti minuscoli, seguiti da un
  trattino, dal numero della versione, dall'estensione, e da altri
  suffissi.

  Supponiamo che si abbia un progetto di nome `foobar', alla versione 1,
  release 2, livello 3. Se si tratta di un solo archivio
  (presumibilmente i sorgenti), ecco come dovrebbero essere i nomi:


     foobar-1.2.3.tar.gz
        L'archivio dei sorgenti


     foobar.lsm
        Il file LSM (assumendo che si sia sottoposti a Sunsite).


  per favore non usare:


     foobar123.tar.gz
        Questo sembrer a molti programmi un archivio di un progetto
        chiamato `foobar123' senza numero della versione.


     foobar1.2.3.tar.gz
        Questo sembrer a molti programmi un archivio di un progetto
        chiamato `foobar1' nella versione  2.3.


     foobar-v1.2.3.tar.gz
        Molti programmi lo interpreterebbero come un progetto chiamato
        `foobar-v1'.


     foo_bar-1.2.3.tar.gz
        La sottolineatura  difficile da leggere, scrivere e ricordare


     FooBar-1.2.3.tar.gz
        A meno che non si voglia assomigliare ad una mezza cartuccia del
        marketing.  Inoltre  difficile da leggere, scrivere, e
        ricordare.

  Se si deve distinguere tra archivi di sorgenti e di binari, o tra tipi
  diversi di binari, o esprimere alcuni tipi di opzioni nel nome del
  file, si  pregati di considerarle come un' estensione del file e
  metterle dopo il numero della versione.  Cio,  meglio scrivere:


     foobar-1.2.3.src.tar.gz
        sorgenti


     foobar-1.2.3.bin.tar.gz
        binari, di tipo non precisato


     foobar-1.2.3.bin.ELF.tar.gz
        binari di tipo ELF


     foobar-1.2.3.bin.ELF.static.tar.gz
        binari ELF linkati staticamente


     foobar-1.2.3.bin.SPARC.tar.gz
        binari SPARC


  Si  pregati di non usare nomi come `foobar-ELF-1.2.3.tar.gz', perch
  i programmi hanno difficolt a distingure i suffissi (come `-ELF')
  dalla radice del nome.

  Un buon modello generale per un nome  costituito, nell'ordine, da:


  1. prefisso del progetto

  2. trattino

  3. numero della versione

  4. punto

  5. "src" o "bin" (facoltativo)

  6. punto o trattino (meglio un punto)

  7. tipologia del binario e opzioni (facoltativo)

  8. estensioni dell'archivio e del tipo di compressione


  2.2.  Scegliere con accuratezza un nome per il prefisso che sia unico
  e facile da digitare

  La radice prefissante dovrebbe essere comune a tutti i file di un
  progetto, facile da leggere, scrivere e ricordare.  Si  pregati
  quindi di non usare sottolineature.  Ugualmente non usare caratteri
  maiuscoli e maiuscoletti senza una buona ragione -- confondono
  l'ordine di ricerca dell'occhio umano e ricordano una mezza cartuccia
  del marketing che voglia fare l'intelligente.

  Crea inoltre confusione il fatto che due progetti diversi hanno lo
  stesso nome. Si cerchi cos di controllare eventuali conflitti prima
  di rilasciare la propria nuova release.  Un buon luogo dove
  controllare  costituito dal file di indice di Sunsite
  <http://sunsite.unc.edu/pub/Linux>.


  3.  Buone regole di sviluppo

  La maggior parte di queste regole sono volte ad assicurare la
  portabilit, non solo verso sistemi Linux ma ugualmente verso altri
  sistemi Unix.  Essere portabile verso altri sistemi Unix non  solo un
  segno di professionalit e cortesia del programmatore, ma anche
  un'assicurazione preziosa contro eventuali futuri cambiamenti in Linux
  stesso.

  Inoltre, altre persone cercheranno di compilare il loro codice su
  sistemi non-Linux; con la portabilit si ridurr il numero di persone
  perplesse che invieranno fastidiosissime e-mail.


  3.1.  Scrivere in puro ANSI C o in un linguaggio portabile

  Per la portabilit e la stabilit, si dovrebbe scrivere in ANSI C o in
  un altro linguaggio che sia garantito come portabile in quanto abbia
  un'implementazione multi-piattaforma.

  Linguaggi di questo tipo includono Python, Perl, Tcl ed Emacs Lisp.
  Vecchi, semplici linguaggi shell non sono qualificati; ci sono troppe
  differenti implementazioni con sottili idiosincrasie, e l'ambiente
  shell  soggetto a interruzioni dovute alle configurazioni dell'utente
  come, ad esempio, quelle degli alias delle shell.
  Java promette bene come linguaggio portabile, ma le implementazioni
  disponibili per Linux sono appena abbozzate e scarsamente integrate
  con Linux. La scelta di Java  per ora il minore dei mali, sebbene
  possa divenire pi popolare con il tempo.



  3.2.  Seguire le buone regole della portabilit del linguaggio C

  Se si scrive in C, si  liberi di usare pienamente le caratteristiche
  ANSI -- prototipi di funzioni inclusi, che aiuteranno a individuare le
  inconsistenze tra i diversi moduli. I compilatori in vecchio stile K&R
  sono superati.

  D'altra parte non si presupponga che alcune caratteristiche specifiche
  del GCC come l'opzione '-pipe' o le funzioni nidificate siano
  disponibili.  Queste si torceranno contro a chiunque faccia un porting
  verso sistemi non-Linux o non-GCC.


  3.3.  Utilizzare autoconf/ automake/ autoheader

  Se si scrive in C, usare autoconf/automake/autoheader per risolvere
  problemi di portabilit, sondare la configurazione del sistema, e
  confezionare i makefile. Chi installa dai sorgenti si aspetta,
  giustamente, di poter digitare "configure; make" e ottenere una
  struttura pulita.


  3.4.  Controllare lo stato del codice prima di rilasciarlo

  Se si scrive in C, fare un test con '-Wall' ed eliminare gli errori
  almeno una volta prima di ciascuna release. Questo blocca un numero
  sorprendente di errori. Per una totale completezza si compili anche
  con '-pedantic'.

  Se si scrive in Perl, controllare il codice con 'perl -c', 'perl -w',
  e 'perl -T' prima di ciascuna release (si veda la documentazione
  Perl).


  4.  Buone regole per creare una distribuzione

  Le seguenti indicazioni descrivono come la propria distribuzione
  dovrebbe apparire quando qualcuno la rintraccia, la scarica e la
  decomprime.


  4.1.  Essere sicuri che gli archivi tar vengano sempre decompressi in
  una nuova singola directory

  Il pi fastidioso errore dei novelli sviluppatori consiste nel fare
  archivi tar che decomprimono i file e le directory della distribuzione
  nella directory corrente, magari sovrascrivendo file gi esistenti.
  Non bisogna farlo mai !

  Invece, si dev'essere sicuri che i file del proprio pacchetto abbiano
  tutti una porzione di directory chiamata come il progetto, affinch
  questi vengano decompressi in una singola directory direttamente sotto
  quella corrente.

  Ecco un trucco per un makefile che agisce in questo modo, assumendo
  che la directory della propria distribuzione venga chiamata `foobar' e
  che SRC contenga un elenco dei file della distribuzione stessa.  Ci
  richiede GNU tar 1.13

  VERS=1.0
  foobar-$(VERS).tar.gz:
          tar --prefix-name='foobar-$(VERS)/' -czf foobar-$(VERS).tar.gz $(SRC)



  Se si ha un versione pi vecchia di tar, si pu provare una cosa del
  tipo:


  foobar-$(VERS).tar.gz:
          @ls $(SRC) | sed s:^:foobar-$(VERS)/: >MANIFEST
          @(cd ..; ln -s foobar foobar-$(VERS))
          (cd ..; tar -czvf foobar/foobar-$(VERS).tar.gz `cat foobar/MANIFEST`)
          @(cd ..; rm foobar-$(VERS))




  4.2.  Fornire un README

  Bisogna fornire un file chiamato README o READ.ME che funga da mappa
  per la propria distribuzione. Per una vecchia convenzione, questo  il
  primo file che gli intrepidi esploratori leggeranno dopo aver
  decompresso i sorgenti.

   bene che il README includa:


    Una breve descrizione del progetto.

    Un link al sito web del progetto (se ne ha uno).

    Note sull'ambiente di progettazione ed eventuali problemi di
     portabilit.

    Una mappa che descriva i file importanti e le sotto-directory.

    Istruzioni per l'installazione e la compilazione o un richiamo a un
     file che contenga le stesse (di solito INSTALL).

    Un elenco di coloro che hanno fatto e che mantengono il progetto o
     un richiamo ad un file che lo contenga (di solito CREDITS).

    Novit recenti sul progetto o un richiamo ad un file che contenga
     le stesse (di solito NEWS).


  4.3.  Rispettare e seguire le regole standard per la titolazione dei
  file

  Prima ancora di leggere il README, l'intrepido esploratore avr
  analizzato i nomi dei file nella directory della distribuzione appena
  decompressa.  Quei nomi possono essi stessi fornire delle
  informazioni. Aderendo a standard fissi sulle regole di nominazione,
  si pu dare all'esploratore degli indizi preziosi su ci che  in
  procinto di guardare.

  Ecco alcuni nomi standard di file e il loro significato. Non  detto
  che siano tutti necessari per tutte le distribuzioni.


     README or READ.ME
        Il file della mappa, da leggersi per primo


     INSTALL
        istruzioni per la configurazione, struttura e l'installazione


     CREDITS
        elenco di chi ha contribuito al progetto


     NEWS
        notizie recenti sul progetto


     HISTORY
        storia del progetto


     COPYING
        termini di licenza del progetto (convenzione GNU)


     LICENSE
        termini di licenza del progetto


     MANIFEST
        elenco dei file della distribuzione


     FAQ
        documento testo contenente le domande poste pi di frequente
        (Frequently Asked Question) sul progetto


     TAGS
        tag-file generato per uso di Emacs o vi

  N.B. Si accetta come convenzione generale che i nomi dei file scritti
  tutti in caratteri maiuscoli costituiscano matainformazioni leggibili
  sul pacchetto, e non sui suoi componenti.


  5.  Buone regole di comunicazione

  Il proprio software non render il mondo migliore se nessuno sa che
  esiste.  Inoltre, con una presenza visibile del progetto su Internet
  sar pi semplice trovare utenti e co-sviluppatori. Ecco i modi
  standard per farlo.


  5.1.  Riferire a c.o.l.a

  Annunciare la nuova release a comp.os.linux.announce
  <news:comp.os.linux.announce>.  Oltre a essere letto da moltissime
  persone, questo gruppo  una dei pi grossi contenitori di siti web
  riguardanti le novit del settore, come Freshmeat
  <http://www.freshmeat.net>.


  5.2.  Riferire ad un newsgroup attinente al tema

  Si trovi un gruppo USENET attinente alla propria applicazione, e si
  annunci l la sua uscita.  Si posti solo dove la funzione del codice 
  attinente, e si restringa il campo d'azione.  Se (per esempio) si sta
  rilasciando un programma scritto in Perl che consulti un server IMAP,
  si dovrebbe sicuramente postare a comp.mail.imap. Ma non si dovrebbe
  probabilmente postare a comp.lang.perl a meno che il programma non sia
  anche un esempio istruttivo delle tecniche Perl all'avanguardia.

  L'annuncio dovrebbe includere l'URL di un sito web del progetto.


  5.3.  Fornire un sito Web

   importante avere un sito web se si vogliono raccogliere utenti o un
  gruppo di sviluppatori del progetto. Caratteristiche standard di un
  sito sono:

    Lo statuto del progetto (perch esiste, a chi si rivolge, ecc.).

    Collegamenti per scaricare i sorgenti.

    Istruzioni per iscriversi alla/alle mailing list del progetto.

    Un elenco di FAQ (Frequently Asked Questions).

    Documentazione in HTML sul progetto.

    Link a progetti correlati e/o in competizione con il proprio.

  Alcuni siti di progetti forniscono anche degli URL per l'accesso
  anonimo al master source tree.


  5.4.  Creare delle mailing list attinenti al progetto

   una pratica comune creare una lista privata di sviluppo attraverso
  cui i collaboratori del progetto possano comunicare e scambiarsi delle
  patch. Si potrebbe anche creare una lista di annunci e notizie per le
  persone che vogliano essere tenute informate sullo stato del progetto.


  5.5.  Distribuzione attraverso i pi importanti archivi

  Negli anni scorsi, l'archivio di Sunsite
  <http://www.sunsite/unc.edu/pub/Linux/>  stato il pi importante
  luogo di scambio per i programmi Linux.

  Altri siti importanti sono:


    Il sito del Python Software Activity <http://www.python.org> (per
     programmi scritti in Python).

    Il CPAN <http://language.perl.com/CPAN>, Comprehensive Perl Archive
     Network, (per programmi scritti in Perl).


  5.6.  Fornire archivi RPM

  La configurazione standard de-facto per i pacchetti di binari
  installabili  quella usata dal Red Hat Package Manager, RPM. 
  presente nella maggior parte delle pi conosciute distribuzioni Linux,
  e supportato efficacemente da praticamente tutte le altre (eccettute
  Debian e Slackware).

  Di conseguenza,  una buona idea per il sito del proprio progetto
  fornire tanto pacchetti RPM installabili quanto archivi tar.