# Γράφοντας Αναφορές Προβλημάτων για το &os;

$FreeBSD$
&tm-attrib.freebsd; &tm-attrib.cvsup; &tm-attrib.ibm; &tm-attrib.intel; &tm-attrib.sparc; &tm-attrib.sun; &tm-attrib.general;

Αυτό το άρθρο περιγράφει πως να μορφοποιήσετε και να στείλετε μια αναφορά προβλήματος στην ομάδα ανάπτυξης του &os;.

Dag-Erling
Smørgrav
Γράφτηκε από

## Εισαγωγή

Μια από τις πιο αποκαρδιωτικές εμπειρίες που μπορεί κάποιος να έχει σαν χρήστης ενός προγράμματος είναι να στείλει μια αναφορά προβλήματος μόνο και μόνο για να δει να την κλείνουν απότομα με μια σύντομη και απότομη εξήγηση όπως π.χ. αυτό δεν είναι πρόβλημα ή λάθος PR. Κατά παρόμοιο τρόπο, μια από τις πιο αποκαρδιωτικές εμπειρίες σαν προγραμματιστής είναι να κατακλύζεται κανείς από αναφορές προβλημάτων που δεν είναι πραγματικά προβλήματα αλλά αιτήσεις για βοήθεια και υποστήριξη ή αναφορές που περιέχουν λίγες έως καθόλου πληροφορίες σχετικά με το πρόβλημα και πως μπορεί κάποιος να το αναπαράγει.

Αυτό το κείμενο είναι μια προσπάθεια να περιγράψω πως μπορείτε να γράφετε καλές αναφορές προβλημάτων. Τι είναι, θα με ρωτήσετε, μια καλή αναφορά προβλήματος; Λοιπόν, για να είμαστε ακριβείς, μια καλή αναφορά προβλήματος είναι αυτή που μπορεί να αναλυθεί και να την χειριστεί κάποιος γρήγορα, με αποτέλεσμα την ευχαρίστηση τόσο του αποστολέα όσο και του προγραμματιστή που την ανέλαβε.

Παρόλο που το κυριότερο μέρος αυτού του άρθρου αναφέρεται στις αναφορές προβλημάτων του &os;, τα πιο πολλά από όσα θα πούμε εδώ ισχύουν και γενικότερα, για πολλά άλλα πράγματα.

Αυτό το άρθρο είναι οργανωμένο θεματικά κι όχι χρονολογικά, οπότε είναι πιο σωστό να το διαβάσετε ολόκληρο πριν να στείλετε κάποια αναφορά προβλήματος, και όχι να το χρησιμοποιήσετε σαν κάποιο βήμα προς βήμα οδηγό.

## Πότε να στείλετε μια αναφορά προβλήματος

Υπάρχουν πολλοί τύποι προβλημάτων, και δεν αξίζουν όλοι μια αναφορά προβλήματος. Φυσικά κανείς δεν είναι τέλειος, και θα υπάρξουν φορές που θα έχετε πειστεί ότι βρήκατε κάποιο πρόβλημα σε ένα πρόγραμμα, όταν στην πραγματικότητα θα έχετε καταλάβει λάθος τη σύνταξη μιας εντολής ή θα έχετε κάνει κάποιο τυπογραφικό λάθος σε ένα αρχείο ρυθμίσεων (αν κι αυτό μερικές φορές είναι ενδεικτικό κακής ή λειψής τεκμηρίωσης ή ακόμα και κακής διαχείρισης λαθών από κάποια εφαρμογή). Ακόμα, υπάρχουν περιπτώσεις που το να στείλετε κάποια αναφορά προβλήματος δεν είναι σωστή κίνηση και το μόνο που μπορεί να πετύχει είναι να ενοχλήσει ή εσάς ή τους προγραμματιστές. Από την άλλη όμως, υπάρχουν περιπτώσεις που μπορεί να είναι καλή σκέψη να στείλετε μια αναφορά προβλήματος για κάτι που δεν είναι bug—μια βελτίωση ή μια αίτηση για κάποιο νέο χαρακτηριστικό, για παράδειγμα.

Τότε λοιπόν, πώς μπορείτε να αποφασίσετε αν κάτι είναι πρόβλημα ή όχι; Ένας απλός κανόνας είναι ότι το πρόβλημά σας δεν είναι bug αν μπορεί να εκφραστεί σαν ερώτηση (συνήθως της μορφής Πώς κάνω το Χ; ή Πού μπορώ να βρω το Ψ;). Δεν είναι πάντα τόσο άσπρο-μαύρο τα πράγματα βέβαια, αλλά ο κανόνας της ερώτησης καλύπτει την μεγαλύτερη πλειοψηφία των περιπτώσεων. Αν αυτό που ψάχνετε είναι κάποια απάντηση, ίσως είναι καλύτερα να στείλετε την ερώτησή σας στην &a.questions;.

Κάποιες περιπτώσεις που πιθανόν να είναι καλή ιδέα να στείλετε μια αναφορά προβλήματος για κάτι που δεν είναι bug, είναι:

- Αιτήσεις για μελλοντικές βελτιώσεις. Είναι γενικά καλή ιδέα να δοκιμάσετε να συζητήσετε πρώτα τέτοιες ιδέες σε κάποια λίστα ηλεκτρονικού ταχυδρομείου πριν στείλετε μια αναφορά προβλήματος.

- Ειδοποίηση για ενημερωμένες εκδόσεις προγραμμάτων (κυρίως ports, αλλά και μέρη του βασικού συστήματος που συντηρούνται από τρίτους, όπως το BIND και τα διάφορα GNU εργαλεία).

Κάτι άλλο σημαντικό που πρέπει να δώσετε προσοχή είναι αν το σύστημα στο οποίο εμφανίζεται το πρόβλημα που σας απασχολεί είναι σχετικά ενημερωμένο. Πρέπει πάντα να δοκιμάζετε να έχετε ένα όσο το δυνατόν πιο ενημερωμένο σύστημα και να δοκιμάζετε να αναπαράγετε το πρόβλημα σε ένα τέτοιο σύστημα πριν να στείλετε μια αναφορά προβλήματος. Υπάρχουν πολύ λίγα πράγματα που μπορούν να ενοχλήσουν ένα προγραμματιστή περισσότερο από το να παίρνει μια αναφορά προβλήματος για κάποιο bug που έχει ήδη διορθωθεί.

Τέλος, ένα bug που δεν μπορεί κανείς να το αναπαράγει είναι πολύ δύσκολο να διορθωθεί. Αν το bug εμφανίστηκε μια φορά μόνο και δεν μπορείτε να το αναπαράγετε εσείς, και φαινομενικά δεν εμφανίζεται σε κανέναν άλλο, είναι πολύ μικρές οι πιθανότητες να μπορεί κάποιος προγραμματιστής να το ανακαλύψει και να καταλάβει τί είναι αυτό που προκαλεί το λάθος. Αυτό δεν σημαίνει πως δεν συμβαίνει, αλλά σημαίνει πως η πιθανότητα να οδηγήσει η αναφορά σας στην λύση του προβλήματος είναι πάρα πολύ μικρή, και μάλλον είναι καλύτερο να σταματήσετε να ασχολείστε με το θέμα. Ακόμα χειρότερα, κάποιες φορές αυτού του είδους τα προβλήματα οφείλονται σε προβλήματα του υλικού (χαλασμένους σκληρούς δίσκους ή επεξεργαστές που υπερθερμαίνονται). Πρέπει πάντοτε πριν στέλνετε μια αναφορά προβλήματος, όταν φυσικά είναι δυνατόν να γίνει κάτι τέτοιο, να προσπαθείτε να αποκλείσετε τέτοιες περιπτώσεις.

## Προετοιμασία

Είναι καλή ιδέα να κάνετε πάντα μια μικρή έρευνα πριν να στείλετε κάποια αναφορά προβλήματος. Μπορεί το πρόβλημά σας να το έχει ήδη αναφέρει και κάποιος άλλος. Μπορεί να είναι θέμα συζητήσεων σε κάποια λίστα ηλεκτρονικού ταχυδρομείου ή να ήταν πρόσφατα. Μπορεί ακόμα, να είναι ήδη διορθωμένο το πρόβλημα σε κάποια έκδοση νεώτερη από αυτή που τρέχετε. Πρέπει λοιπόν να ελέγχετε όλα τα προφανή σημεία, πριν να στείλετε μια αναφορά προβλήματος. Για το &os; αυτό σημαίνει:

- Την λίστα με τις πιο συχνές ερωτήσεις (FAQ) για το &os;. Η λίστα αυτή παρέχει απαντήσεις σε μια μεγάλη ποικιλία ερωτήσεων, όπως αυτές που αφορούν το υλικό, τις εφαρμογές και τις ρυθμίσεις του πυρήνα.

- Οι λίστες ηλεκτρονικού ταχυδρομείου—αν δεν έχετε γραφτεί σε κάποια από αυτές, μπορείτε να χρησιμοποιήσετε το αρχείο στις σελίδες του &os; για να αναζητήσετε πληροφορίες σχετικές με το πρόβλημα. Αν το πρόβλημά σας δεν έχει συζητηθεί στις λίστες είναι, γενικά, καλή ιδέα να στείλετε ένα γράμμα στις λίστες ηλεκτρονικού ταχυδρομείου και να περιμένετε λίγες μέρες μήπως κάποιος βρει κάτι που εσείς δεν προσέξατε.

- Προαιρετικά, όλο το δίκτυο. Χρησιμοποιήστε την αγαπημένη σας μηχανή αναζήτησης για να βρείτε πληροφορίες σχετικά με το πρόβλημα. Έτσι μπορεί να βρείτε ακόμη και αναφορές από λίστες ηλεκτρονικού ταχυδρομείου ή ομάδες συζητήσεων που δεν ξέρατε ότι υπάρχουν ή δεν σκεφτήκατε να ψάξετε.

- Ύστερα μπορείτε να αναζητήσετε σχετικές αναφορές στην βάση αναφορών του &os; (GNATS). Αν το πρόβλημά σας δεν είναι πρόσφατο ή αρκετά περίεργο, είναι πολύ πιθανόν να έχει ήδη στείλει κάποιος άλλος μια αναφορά.

- Το πιο σημαντικό από όλα όμως είναι να δείτε μήπως η τεκμηρίωση του &os; περιέχει κάποια λύση στο πρόβλημά σας.

  Για το βασικό σύστημα του &os; πρέπει να μελετήσετε προσεκτικά τις οδηγίες που περιέχει το αρχείο `/usr/src/UPDATING` στο σύστημά σας ή αυτές που περιέχει η τελευταία έκδοση του αρχείου, η οποία είναι διαθέσιμη στη διεύθυνση: . (Αυτό το αρχείο περιέχει κρίσιμες πληροφορίες για αναβάθμιση από μια έκδοση του &os; σε κάποια άλλη—ειδικά για τις εκδόσεις του &os.current;).

  Αν το πρόβλημα εμφανίζεται σε κάτι που εγκαταστάθηκε ως μέρος της Συλλογής των Ports του &os;, τα αντίστοιχα αρχεία με πληροφορίες είναι τα: `/usr/ports/UPDATING` (για πληροφορίες σχετικά με συγκεκριμένα πακέτα), `/usr/ports/CHANGES` (για αλλαγές που αφορούν όλη την Συλλογή των Ports). Κι αυτά τα αρχεία είναι διαθέσιμα μέσω CVSweb, στις διευθύνσεις και αντίστοιχα.

Αφού έχετε κάνει όλα αυτά θα πρέπει να βεβαιωθείτε ότι η αναφορά σας θα πάει στα κατάλληλα άτομα.

Η πρώτη παγίδα εδώ είναι ότι αν το πρόβλημα αφορά κάποιο πρόγραμμα που γράφεται από τρίτους κι όχι την ομάδα ανάπτυξης του &os; (είναι π.χ. για κάποιο port ή πακέτο που στήσατε), πρέπει να αναφέρετε το πρόβλημα στον αρχικό συγραφέα του προγράμματος, κι όχι στην ομάδα του &os;. Υπάρχουν δυο εξαιρέσεις σε αυτόν τον κανόνα. Η πρώτη είναι όταν το πρόβλημα δεν εμφανίζεται σε άλλες πλατφόρμες, οπότε σε αυτήν την περίπτωση μπορεί το πρόβλημα να σχετίζεται με τον τρόπο που μεταφέρθηκε το πρόγραμμα στο &os;. Η δεύτερη περίπτωση είναι όταν ο αρχικός συγγραφέας έχει ήδη διορθώσει το πρόβλημα και έχει διανείμει κάποιο patch ή μια νέα έκδοση του προγράμματος, αλλά δεν έχει μεταφερθεί ακόμα η νέα έκδοση στο &os;.

Η δεύτερη παγίδα είναι ότι το σύστημα που χρησιμοποιεί η ομάδα του &os; για να παρακολουθεί και να καταγράφει προβλήματα καταχωρεί τις αναφορές σε κατηγορίες ανάλογα με τις επιλογές αυτού που στέλνει την αναφορά. Έτσι, αν διαλέξετε λάθος κατηγορία για την αναφορά σας, υπάρχει πάντα η πιθανότητα να περάσει απαρατήρητη για κάποιο χρονικό διάστημα, μέχρι κάποιος να την βάλει στη σωστή κατηγορία χειροκίνητα.

## Γράφοντας αναφορές προβλημάτων

Τώρα που έχετε αποφασίσει ότι αξίζει να γράψετε κάποια αναφορά προβλήματος, και ότι όντως είναι κάποιο πρόβλημα του &os; αυτό που θέλετε να περιγράψετε, είναι ώρα να γράψετε την αναφορά. Πριν μπούμε σε λεπτομέρειες σχετικά με το πρόγραμμα που χρησιμοποιείται για να γράφονται και να στέλνονται οι αναφορές προβλημάτων, ας δούμε μερικά κόλπα που θα σας βοηθήσουν να στείλετε χρήσιμες αναφορές.

### Κόλπα για να γράφετε χρήσιμες αναφορές προβλημάτων

- Μην αφήνετε κενή την γραμμή Synopsis. Οι αναφορές προβλημάτων στέλνονται σε μια λίστα ηλεκτρονικού ταχυδρομείου, η οποία προωθεί την αναφορά σας σε ανθρώπους σε όλο τον κόσμο (όπου το κείμενο της γραμμής Synopsis χρησιμοποιείται ως θέμα του μηνύματος), αλλά και σε μια βάση δεδομένων. Οποιοσδήποτε προσπαθήσει αργότερα να δει μια λίστα με τις αναφορές προβλημάτων μπορεί να αγνοήσει εντελώς την αναφορά σας αν δεν έχει θέμα. Να έχετε κατα νου σας ότι οι αναφορές μένουν σε αυτή τη βάση μέχρι κάποιος να ασχοληθεί μαζί τους και να τις κλείσει. Μια ανώνυμη αναφορά, χωρίς κανένα θέμα, συνήθως, χάνεται στο θόρυβο.

- Μη χρησιμοποιείτε αταίριαστες περιγραφές στη γραμμή Synopsis. Μην θεωρείτε ότι οποιοσδήποτε διαβάσει την αναφορά σας θα έχει και το κατάλληλο υπόβαθρο για να καταλάβει τι λέτε, οπότε όσο περισσότερες λεπτομέρειες συμπεριλάβετε τόσο καλύτερα είναι. Για παράδειγμα, η αναφορά και το πρόβλημα που στέλνετε ποιο μέρος του συστήματός σας αφορά; Το πρόβλημα εμφανίζεται μόνο κατά τη διάρκεια της εγκατάστασης ή και μετά; Για παράδειγμα, δείτε πόσο πιο καλά είναι αν αντί να γράψετε `Synopsis: portupgrade is broken` γίνετε πιο περιγραφικοί `Synopsis: port sysutils/portupgrade coredumps on -current`. (Ειδικά στην περίπτωση των ports είναι πολύ χρήσιμο να υπάρχει τόσο η κατηγορία όσο και το όνομα του port στη γραμμή της σύνοψης).

- Αν έχετε κάποιο patch, πείτε το. Είναι πολύ ππιο πιθανό να ασχοληθεί κάποιος με μια αναφορά προβλήματος που περιλαμβάνει και κάποιο patch από ότι με κάποια που απλά αναφέρει το πρόβλημα. Αν η αναφορά σας περιλαμβάνει κάποιο patch τότε είναι καλή ιδέα να προσθέσετε το κείμενο `[patch]` στην αρχή της Synopsis σας. (Παρόλο που δεν είναι υποχρεωτικό να χρησιμοποιήσετε ακριβώς αυτό το κείμενο, συνήθως αυτό χρησιμοποιούν οι περισσότεροι μέχρι σήμερα.)

- Αν είστε εσείς ο υπεύθυνος για τη συντήρηση κάποιου μέρους του κώδικα, πείτε το. Αν είναι δική σας ευθύνη η συντήρηση κάποιου μέρους του κώδικα του &os; (για παράδειγμα είστε ο MAINTAINER κάποιου port), δεν είναι άσχημη ιδέα να προσθέσετε το κείμενο `[maintainer update]` στην αρχή της Synopsis σας. Οπωσδήποτε όμως να θυμηθείτε να θέσετε την τιμή του Class της αναφοράς σας σε `maintainer-update`. Έτσι όποιο μέλος της ομάδας ανάπτυξης ασχοληθεί με την αναφορά σας δε θα χρειάζεται να ελέγξει αν όντως εσείς είστε ο maintainer.

- Να είστε ακριβείς & συγκεκριμένοι. Όσο περισσότερες πληροφορίες γράψετε σχετικά με το πρόβλημα που αντιμετωπίζετε, τόσο αυξάνονται οι πιθανότητες να πάρετε μια χρήσιμη και σωστή απάντηση.

  - Συμπεριλάβετε την έκδοση του &os; που χρησιμοποιείτε (παρακάτω θα δούμε πως υπάρχει συγκεκριμένο μέρος που μπορείτε να το γράψετε αυτό) και ποιας αρχιτεκτονικής είναι το μηχάνημά σας. Είναι ιδιαίτερα χρήσιμο να γράψετε αν τρέχετε κάποια επίσημη έκδοση (π.χ. από ένα CDROM ή κάποια που κατεβάσατε από το δίκτυο) ή αν το σύστημα σας το ενημερώνετε με το &man.cvsup.1; (κι αν ναι, πόσο πρόσφατα το ενημερώσατε). Αν χρησιμοποιείτε το &os.current;, αυτό είναι και το πρώτο πράγμα που θα σας ρωτήσει κάποιος, επειδή οι αλλαγές και οι διορθώσεις (ειδικά για τα σημαντικά προβλήματα) γίνονται, γενικά, πολύ γρήγορα και συχνά. Οι χρήστες του &os.current; πρέπει να τις παρακολουθούν με προσοχή και να ενημερώνουν συχνά το σύστημά τους.

  - Συμπεριλάβετε και τις ρυθμίσεις που περιέχει το αρχείο `make.conf` στο σύστημά σας. Σημειώστε πως η χρήση της επιλογής `-O2` του &man.gcc.1; είναι γνωστή πηγή προβλημάτων. Παρόλο που η ομάδα ανάπτυξης του &os; δεν θα 'λεγε όχι σε patches που να διορθώνουν αυτά τα προβλήματα είναι γενικά απρόθυμη στο να αναζητά τις αιτίες τέτοιων προβλημάτων επειδή δεν έχει το χρόνο ή το ανθρώπινο δυναμικό να το κάνει. Αν τα προβλήματά σας οφείλονται σε αυτό το πρόβλημα των optimizations μπορεί να σας απαντήσουν ότι δεν υποστηρίζεται αυτός ο τρόπος χρήσης του &os;.

  - Αν το πρόβλημά σας αφορά τον πυρήνα, τότε να είστε προετοιμασμένοι να δώσετε και τις εξής έξτρα πληροφορίες. (Δεν είναι ανάγκη να τις συμπεριλάβετε έτσι κι αλλιώς, αφού το μόνο που θα καταφέρετε είναι να αυξήσετε χωρίς λόγο το χώρο που απαιτεί η βάση προβλημάτων στο δίσκο, αλλά δεν είναι κακή ιδέα να συμπεριλάβετε μόνο τα μέρη που θεωρείτε σχετικά):

    - τις ρυθμίσεις του πυρήνα σας (και ποιές συσκευές έχετε εγκατεστημένες στο μηχάνημά σας)

    - αν έχετε ενεργοποιημένες επιλογές debugging στον πυρήνα σας (όπως π.χ. την επιλογή `WITNESS`) κι αν ναι αν το πρόβλημα συνεχίζει να υπάρχει αφαιρώντας αυτές τις επιλογές

    - ένα backtrace, αν μπορέσατε να καταγράψετε κάποιο

    - αν έχετε διαβάσει προσεκτικά το αρχείο `src/UPDATING` κι αν το πρόβλημά σας αναφέρεται ή όχι σε αυτό (είναι σίγουρο ότι κάποιος θα σας ρωτήσει γι αυτό)

    - αν μπορείτε να τρέξετε κάποιο άλλο πυρήνα σαν προσωρινή λύση (έτσι αποκλείονται προβλήματα με το υλικό, όπως δίσκοι που άρχισαν να χαλάνε ή επεξεργαστές που υπερθερμαίνονται, που μπορεί να σας μπερδέψουν και να νομίσετε ότι έχει πρόβλημα ο πυρήνας)

  - Αν έχετε πρόβλημα με κάποιο port, τότε να έχετε διαθέσιμες τις εξής πληροφορίες. (Δεν είναι ανάγκη να τις συμπεριλάβετε έτσι κι αλλιώς, αλλά δεν είναι κακή ιδέα να συμπεριλάβετε μόνο τα μέρη που θεωρείτε σχετικά):

    - ποια ports έχετε εγκαταστήσει

    - μεταβλητές του περιβάλλοντος που μπορεί να επηρεάζουν τις προκαθορισμένες ρυθμίσεις του συστήματος στο αρχείο `bsd.port.mk`, όπως π.χ. η μεταβλητή περιβάλλοντος PORTSDIR

    - αν έχετε διαβάσει το αρχείο `ports/UPDATING` κι αν το πρόβλημά σας αναφέρεται ή όχι σε αυτό (είναι σίγουρο ότι κάποιος θα σας ρωτήσει γι αυτό)

- Αποφύγετε τις ασαφείς αιτήσεις για νέα χαρακτηριστικά.

  Οι αναφορές της μορφής στ' αλήθεια, κάποιος πρέπει να υλοποιήσει κάτι που να κάνει το τάδε ή το δείνα δεν είναι πολύ σίγουρο ότι θα τύχουν καλύτερης αντιμετώπισης από τις αναφορές που περιγράφουν συγκεκριμένες αλλαγές. Να θυμάστε ότι ο κώδικας είναι διαθέσιμος σε όλους, οπότε αν θέλετε κάποιο νέο χαρακτηριστικό ο καλύτερος τρόπος να το δείτε να υλοποιείται σαν μέρος του &os; είναι να το φτιάξετε εσείς. Πολλές φορές μάλιστα είναι προτιμότερο να ρωτήσετε στην `freebsd-questions` παρά να δημιουργήσετε μια καινούρια εγγραφή στη βάση αναφορών προβλημάτων.

- Σιγουρευτείτε ότι δεν έχει στείλει ήδη κάποιος άλλος μια παρόμοια αναφορά. Παρόλο που το έχουμε ξαναπεί αυτό, αξίζει να το αναφέρουμε πάλι εδώ. Χρειάζεται μόνο ένα λεπτό για να ανοίξετε ένα φυλλομετρητή και να χρησιμοποιήσετε τη μηχανή αναζήτησης αναφορών προβλημάτων του &os; στη διεύθυνση . (Φυσικά, όλοι έχουμε ξεχάσει κάποιες φορές να το κάνουμε αυτό.)

- Αποφύγετε τις επικίνδυνες αιτήσεις. Αν η αναφορά σας επηρεάζει ένα μέρος του κώδικα για το οποίο υπήρξαν διαφωνίες στο παρελθόν, μάλλον πρέπει εκτός από τα patches που θα ετοιμάσετε να είστε προετοιμασμένοι και για να δικιολογήσετε τις αλλαγές σας, εξηγώντας γιατί είναι Σωστό να Γίνουν. Όπως είπαμε και πιο πριν, μια προσεκτική αναζήτηση στα αρχεία των λιστών ηλεκτρονικού ταχυδρομείου στη διεύθυνση είναι πάντα καλός τρόπος να προετοιμαστείτε για τέτοιες καταστάσεις.

- Να είστε ευγενικοί. Σχεδόν όλοι όσοι πρόκειται να ασχοληθούν με την αναφορά σας για κάποιο πρόβλημα είναι εθελοντές. Σε κανέναν δεν αρέσει να τους λένε τι να κάνουν όταν ήδη κάνουν το ίδιο πράγμα εδώ και καιρό για λόγους που δεν έχουν σχέση με οικονομικές απολαβές. Είναι καλό να το έχετε κατά νου αυτό όταν ασχολείστε με προγράμματα Ανοιχτού Λογισμικού ή Λογισμικού Ελεύθερου Κώδικα.

### Πριν αρχίσετε

Πριν τρέξετε το πρόγραμμα &man.send-pr.1;, σιγουρευτείτε ότι η μεταβλητή περιβάλλοντος `VISUAL` (ή η μεταβλητή περιβάλλοντος `EDITOR` αν δεν είναι ορισμένη η `VISUAL`) έχει κάποια λογική τιμή.

Ελέγξτε επίσης ότι η αποστολή ηλεκτρονικής αλληλογραφίας λειτουργεί σωστά. Το πρόγραμμα &man.send-pr.1; χρησιμοποιεί μηνύματα ηλεκτρονικής αλληλογραφίας για την αποστολή και την παρακολούθηση των αναφορών προβλημάτων. Αν δε μπορείτε να στείλετε μηνύματα ηλεκτρονικής αλληλογραφίας από το μηχάνημα στο οποίο χρησιμοποιείτε το πρόγραμμα &man.send-pr.1;, το μήνυμά σας και η αναφορά δε θα φτάσει ποτέ στη βάση αναφορών προβλημάτων του &os;. Για λεπτομέρειες σχετικά με τη ρύθμιση της ηλεκτρονικής αλληλογραφίας στο &os; δείτε το κεφάλαιο περί Ηλεκτρονικής Αλληλογραφίας στο Εγχειρίδιο του &os; στη διεύθυνση .

### Επισυνάπτοντας patches ή αρχεία

Το πρόγραμμα &man.send-pr.1; έχει την δυνατότητα να επισυνάψει αρχεία σε μια αναφορά προβλήματος. Μπορείτε να επισυνάψετε όσα αρχεία θέλετε, αρκεί το καθένα να έχει μοναδικό βασικό όνομα (το όνομα του αρχείου χωρίς την διαδρομή). Απλά χρησιμοποιήστε την παράμετρο `-a` στην γραμμή εντολών για να καταδείξετε τα ονόματα των αρχείων που θέλετε να επισυνάψετε:

    &prompt.user; send-pr -a /var/run/dmesg -a /tmp/errors

Δεν χρειάζεται να ανησυχείτε για τα αρχεία που δεν είναι κείμενο. Θα κωδικοποιηθούν κατάλληλα για να μην τα αλλάξει το πρόγραμμα αποστολής ηλεκτρονικής αλληλογραφίας που χρησιμοποιείτε.

Αν μαζί με την αναφορά στείλετε και κάποιο patch, φροντίστε να χρησιμοποιήσετε την επιλογή `-c` ή την `-u` στην εντολή &man.diff.1; για να δημιουργήσετε ένα context ή unified αρχείο διαφορών, και μην ξεχάσετε να σημειώσετε τις ακριβείς εκδόσεις των αρχείων που αλλάξατε έτσι ώστε οι προγραμματιστές που θα διαβάσουν την αναφορά σας να μπορούν να κάνουν τις ίδιες αλλαγές εύκολα. Για τα προβλήματα που αφορούν τον πυρήνα ή τα εργαλεία του βασικού συστήματος είναι προτιμότερο το patch σας να βασίζεται στο &os.current; (το HEAD branch του CVS) αφού όλες οι αλλαγές πρέπει πρώτα να γίνονται σε αυτό το branch για να δοκιμαστούν. Αφού περάσει κάποιος καιρός κι οι αλλαγές δοκιμαστούν αρκετά μόνο τότε ενσωματώνονται/μεταφέρονται οι αλλαγές στο &os.stable; branch.

Αν ενσωματώσετε το patch σας στην αναφορά, αντί να το στείλετε σαν επισύναψη, προσέξτε αρκετά γιατί ένα αρκετά συχνό πρόβλημα είναι πως πολλά προγράμματα ηλεκτρονικής αλληλογραφίας έχουν την τάση να μετατρέπουν τους στηλοθέτες σε κενά, κάτι που καταστρέφει εντελώς οτιδήποτε αποτελεί μέρος κάποιου Makefile.

Γενικά, πάντως, δεν τρέχει τίποτα αν ενσωματώσετε κάποιο μικρό patch στην αναφορά σας—ειδικά αν είναι φανερό πως διορθώνει το πρόβλημα που περιγράφεται στην αναφορά. Τα πιο μεγάλα patches, κυρίως κώδικας που μπορεί να απαιτεί λεπτομερή ανάλυση και δοκιμές πριν γίνει commit, είναι καλύτερα να τα ανεβάζετε σε κάποιο web ή ftp server και να περιλαμβάνετε στην αναφορά σας το URL για να τα βρίσκει ο αναγνώστης της αναφοράς αντί να ενσωματώνετε το ίδιο το patch. Πολλές φορές τα patches καταστρέφονται όταν είναι μέρος ενός email, ειδικά όταν περνούν από το πρόγραμμα GNATS, κι όσο πιο μεγάλο είναι το patch τόσο πιο δύσκολο θα είναι για όποιον ενδιαφέρεται να το διορθώσει για να το δοκιμάσει. Ένα άλλο καλό που έχει η διανομή ενός patch μέσω web ή ftp είναι ότι μπορείτε να αλλάξετε το patch χωρίς να χρειάζεται να το ξαναστείλετε όλο σαν μέρος μιας απάντησης στην αρχική αναφορά.

Μην ξεχνάτε επίσης ότι, αν δεν το δηλώσετε ρητά στην αναφορά που θα στείλετε ή στο ίδιο το patch, οποιεσδήποτε αλλαγές στείλετε θεωρείται αυτόματα ότι είναι διαθέσιμες κάτω από τους ίδιους όρους και με την ίδια άδεια που έχει η έκδοση του κάθε αρχείου που έχετε τροποποιήσει.

### Συμπληρώνοντας την φόρμα της αναφοράς

Όταν τρέξετε το πρόγραμμα &man.send-pr.1; θα δείτε μια φόρμα αναφοράς. Η φόρμα της αναφοράς αποτελείται από μια σειρά πεδίων. Κάποια από αυτά είναι είναι προσυμπληρωμένα. Κάποια άλλα έχουν σχόλια που εξηγούν τον σκοπό τους ή αναφέρουν τις αποδεκτές τιμές. Μην ανησυχείτε για τα σχόλια, αφού έτσι κι αλλιώς θα αφαιρεθούν αυτόματα αν δεν τα αλλάξετε ή δεν τα σβήσετε.

Στην κορυφή της φόρμας, κάτω από τις γραμμές που αρχίζουν με `SEND-PR:` υπάρχουν οι επικεφαλίδες ενός γράμματος. Συνήθως δεν χρειάζετε να κάνετε κάποια αλλαγή σε αυτές, εκτός κι αν στέλνετε την αναφορά από κάποιο μηχάνημα το οποίο μπορεί να στείλει email αλλά δεν μπορεί να λάβει, που θα πρέπει να προσέξετε οι γραμμές `From:` και `Reply-To:` να έχουν την πραγματική σας email διεύθυνση. Μπορείτε φυσικα να στείλετε στον εαυτό σας ή κάποιον άλλο ένα αντίγραφο της αναφοράς προβλήματος προσθέτοντας τις κατάλληλες `Cc:` γραμμές.

Μετά θα δείτε μια σειρά από πεδία μιας γραμμής:

- Submitter-Id: Μην το αλλάξετε αυτό. Η προκαθορισμένη τιμή του, `current-users`, είναι σωστή ακόμα κι αν χρησιμοποιείτε το &os.stable;.

- Originator: Αυτό το πεδίο είναι κανονικά προσυμπληρωμένο με το όνομα του τρέχοντος χρήστη. Αν αυτό δεν είναι σωστό, παρακαλώ συμπληρώστε την τιμή αυτού του πεδίου με το πραγματικό σας όνομα και προαιρετικά την email διεύθυνσή σας μέσα σε < και >.

- Organization: Αυτό το πεδίο δεν χρησιμοποιείται για τίποτα σημαντικό.

- Confidential: Αυτό το πεδίο είναι προσυμπληρωμένο με `no`. Δεν έχει νόημα να το αλλάξετε σε κάτι άλλο, αφού δεν υπάρχουν εμπιστευτικές αναφορές προβλημάτων στο &os;—η συλλογή των προβλημάτων είναι ανοιχτή και διαθέσιμη μέσω CVSup για όλο τον κόσμο.

- Synopsis: Συμπληρώστε αυτό με μια σύντομη και ακριβή περιγραφή του προβλήματος. Η synopsis χρησιμοποιείται σαν το θέμα στα email τα σχετικά με την αναφορά, καθώς και σε λίστες αναφορών και περιλήψεις. Οι αναφορές προβλήματος με περίεργες περιγραφές στο πεδίο αυτό συνήθως αγνοούνται.

  Όπως είπαμε παραπάνω, αν η αναφορά σας περιλαμβάνει κάποιο patch καλό είναι να ξεκινήσετε την γραμμή της σύνοψης με το κείμενο `[patch]`. Αν πάλι είστε ο υπεύθυνος (maintainer) για κάποιο μέρος του κώδικα, καλό είναι να προσθέσετε στη σύνοψη το κείμενο `[maintainer update]` και να θέσετε την τιμή της επικεφαλίδας Class σε `maintainer-update`.

- Severity: Μπορεί να πάρει τιμή `non-critical`, `serious` ή `critical`. Μην αντιδράτε υπερβολικά. Αποφύγετε να χαρακτηρίζετε τις αναφορές σας `critical` εκτός κι αν είναι όντως μεγάλης σημασίας (π.χ. root exploit, κάποιο panic που μπορεί να αναπαραχθεί εύκολα) ή `serious` εκτός κι αν είναι κάτι που αφορά πολλούς χρήστες (προβλήματα με συγκεκριμένους οδηγούς συσκευών ή εργαλεία του συστήματος). Δεν είναι απαραίτητο πως οι προγραμματιστές του &os; θα ασχοληθούν πιο νωρίς με το πρόβλημά σας αν υπερβάλλετε για την σημασία του επειδή υπάρχει πολύς κόσμος που το κάνει αυτό—μάλιστα, υπάρχουν προγραμματιστές που αγνοούν εντελώς αυτό το πεδίο και το επόμενο, ακριβώς επειδή αυτοί που στέλνουν τις αναφορές έχουν την τάση να υπερεκτιμούν τα προβλήματά τους.

- Priority: Μπορεί να πάρει τιμή `low`, `medium` ή `high`. Προτεραιότητα `high` πρέπει να δίνεται μόνο σε αναφορές προβλημάτων τα οποία επηρεάζουν πρακτικά όλους τους χρήστες του &os; και `medium` στα προβλήματα που αφορούν ένα μεγάλο αριθμό χρηστών.

- Category: Επιλέξτε μια από τις ακόλουθες κατηγορίες (από το αρχείο `/usr/gnats/gnats-adm/categories`):

  - `advocacy:` αναφορές σχετικές με την δημόσια εικόνα του &os;. Χρησιμοποιείται σπάνια.

  - `alpha:` αναφορές σχετικές με την πλατφόρμα Alpha platform.

  - `amd64:` αναφορές σχετικά με προβλήματα της πλατφόρμας AMD64.

  - `bin:` αναφορές σχετικές με προγράμματα στο βασικό σύστημα.

  - `conf:` αναφορές σχετικές με αρχεία ρυθμίσεων, προκαθορισμένες τιμές, κλπ.

  - `docs:` αναφορές σχετικές με τις manual pages ή γενικά την τεκμηρίωση.

  - `gnu:` αναφορές σχετικές με προγράμματα GNU, όπως π.χ. &man.gcc.1; ή &man.grep.1;.

  - `i386:` αναφορές σχετικές με την πλατφόρμα i386 platform.

  - `ia64:` αναφορές σχετικές με την πλατφόρμα ia64.

  - `java:` αναφορές σχετικές με την Java™.

  - `kern:` αναφορές για τον πυρήνα.

  - `misc:` οτιδήποτε δεν ταιριάζει σε κάποια από τις υπόλοιπες κατηγορίες. (Σημειώστε πως είναι εύκολο να χαθεί μια αναφορά σε αυτή την κατηγορία.)

  - `ports:` αναφορές σχετικές με τα ports.

  - `powerpc:` αναφορές σχετικές με την πλατφόρμα PowerPC.

  - `sparc64:` αναφορές σχετικές με την πλατφόρμα SPARC.

  - `standards:` αναφορές σχετικές με την συμβατότητα με τα διάφορα Πρότυπα.

  - `threads:` αναφορές σχετικές με την υλοποίηση των threads στο &os; (ειδικά στο &os.current;).

  - `www:` αλλαγές ή βελτιώσεις στην δικτυακή σελίδα του &os;.

- Class: Για το πεδίο αυτό, επιλέξτε μια από τις παρακάτω τιμές:

  - `sw-bug:` software bugs.

  - `doc-bug:` λάθη στην τεκμηρίωση.

  - `change-request:` ιδέες και αιτήσεις για πρόσθετα χαρακτηριστικά ή αλλαγές σε υπάρχοντα.

  - `update:` ενημερώσεις των ports ή άλλων προγραμμάτων που φτιάχνονται από τρίτους.

  - `maintainer-update:` ενημερώσεις σε ports για τα οποία συντηρείτε εσείς.

- Release: Η έκδοση του &os; που χρησιμοποιείτε. Αυτό το πεδίο συμπληρώνεται αυτόματα από την &man.send-pr.1; και χρειάζεται να το αλλάξετε μόνο στην περίπτωση που στέλνετε μια αναφορά προβλήματος από άλλο μηχάννημα, κι όχι από αυτό που έχει το πρόβλημα.

Τέλος, υπάρχει μια σειρά από πεδία με περισσότερες από μια γραμμές το καθένα:

- Environment: Εδώ πρέπει να περιγράφεται, με όσο το δυνατόν μεγαλύτερη ακρίβεια, το περιβάλλον στο οποίο παρατηρήσατε το πρόβλημα. Αυτό περιλαμβάνει την έκδοση του λειτουργικού συστήματος, την έκδοση του συγκεκριμένου προγράμματος ή αρχείου που έχει το πρόβλημα και οποιαδήποτε άλλα χαρακτηριστικά από το σύστημα και τις ρυθμίσεις του θεωρείτε σημαντικά, άλλα εγκατεστημένα προγράμματα που πιστεύετε ότι πιθανόν έχουν σχέση με το πρόβλημα, κλπ—πολύ απλά, οτιδήποτε χρειάζεται να ξέρει ένας προγραμματιστής για να εξομοιώσει με ακρίβεια το περιβάλλον στο οποίο εμφανίζεται το πρόβλημα.

- Description: Μια πλήρης και ακριβής περιγραφή του προβλήματος που αντιμετωπίζετε. Προσπαθείστε να αποφύγετε εικασίες σχετικά με την αιτία του προβλήματος εκτός κι αν είστε σίγουροι ότι βρίσκετε σε σωστό δρόμο, καθώς μπορεί να οδηγήσετε κάποιο προγραμματιστή να κάνει λάθος υποθέτοντας κάποια πράγματα που δεν είναι σωστά.

- How-To-Repeat: Μια περίληψη των ενεργειών που χρειάζονται για να αναπαράγει κάποιος το πρόβλημα.

- Fix: Κατά προτίμηση κάποιο patch ή τουλάχιστον κάτι που ξεπερνά/αποφεύγει το πρόβλημα (κάτι που όχι μόνο βοηθά όποιον έχει το ίδιο πρόβλημα να το αποφύγει, αλλά μπορεί ακόμη και να βοηθήσει κάποιον προγραμματιστή να καταλάβει την πραγματική αιτία του προβλήματος). Αν δεν έχετε βέβαια κάποια ιδέα, μπορείτε πάντα να αφήσετε αυτό το πεδίο κενό. Είναι πολύ καλύτερα από το να κάνετε απλώς εικασίες.

### Στέλνοντας την αναφορά

Όταν τελειώσετε με το γράψιμο, την συμπλήρωση της φόρμας, και σώσετε το κείμενο της αναφοράς σε ένα αρχείο, το πρόγραμμα &man.send-pr.1; θα σας δείξει μια προτροπή

s)end, e)dit or a)bort?. Μπορείτε τότε να πατήσετε `s` για να συνεχίσετε και να σταλεί η αναφορά, `e` για να ξεκινήσετε πάλι τον κειμενογράφο σας, ή `a` για να εγκαταλείψετε. Αν επιλέξετε το τελευταίο, το κείμενο της αναφοράς σας θα παραμείνει στο δίσκο (η &man.send-pr.1; θα γράψει το όνομα του αρχείου πριν τερματίσει), οπότε μπορείτε να το επεξεργαστείτε με την ησυχία σας αργότερα ή να το μεταφέρετε σε κάποιο σύστημα με καλύτερη σύνδεση δικτύου, πριν να το στείλετε με την επιλογή `-f` της &man.send-pr.1;:

    &prompt.user; send-pr -f ~/my-problem-report

Αυτή η εντολή θα διαβάσει μια αναφορά προβλήματος από το αρχείο, θα κάνει κάποιους ελέγχους στα περιεχόμενα, θα σβήσει τα σχόλια και στείλει την αναφορά.

## Απαντήσεις

Μόλις η αναφορά σας καταχωρηθεί, θα πάρετε μια απάντηση μέσω email που θα περιλαμβάνει τον αριθμό που έχει σχετιστεί με την αναφορά σας και μια διεύθυνση URL όπου μπορείτε να διαβάσετε την αναφορά και την κατάστασή της. Με λίγη τύχη, κάποιος θα ενδιαφερθεί για την αναφορά σας και θα προσπαθήσει να λύσει το πρόβλημα ή τουλάχιστον, ανάλογα με την περίπτωση, να σας εξηγήσει γιατί δεν είναι πρόβλημα. Θα ειδοποιήστε αυτόματα για κάθε αλλαγή στην κατάσταση της αναφοράς, και θα παίρνετε αντίγραφα μέσω αλληλογραφίας με οποιαδήποτε σχόλια ή patches στέλνει κάποιος σαν απάντηση στην αναφορά σας.

Αν κάποιος σας ζητήσει επιπλέον πληροφορίες ή θυμηθείτε κάτι ή ανακαλύψετε κάτι που δεν έχετε αναφέρει στην αρχική σας αναφορά, τότε χρησιμοποιήστε έναν από τους ακόλουθους τρόπους για να στείλετε συμπληρωματικές πληροφορίες:

- Ο πιο εύκολος τρόπος είναι να ακολουθήσετε το σύνδεσμο στην σελίδα της αναφοράς, την οποία μπορείτε να βρείτε από τη σελίδα αναζήτησης των αναφορών. Αν ακολουθήσετε το σύνδεσμο που έχει στο κάτω μέρος η σελίδα θα ανοίξει το πρόγραμμα αλληλογραφίας σας με το σωστό αποστολέα και το σωστό θέμα (αρκεί ο φυλλομετρητής σας υποστηρίζει την εκτέλεση εξωτερικών προγραμμάτων).

- Εναλλακτικά μπορείτε να στείλετε απλά ένα μήνυμα στη διεύθυνση bug-followup@FreeBSD.org, προσέχοντας να βάλετε το σωστό αριθμό αναφοράς στο θέμα έτσι ώστε να τον βρει το σύστημα παρακολούθησης αναφορών του &os; και να ξέρει σε ποιά αναφορά πρέπει να επισυνάψει το μήνυμά σας.

  Αν δεν συμπεριλάβετε το σωστό αριθμό αναφοράς στο θέμα, το πρόγραμμα GNATS που οργανώνει τις αναφορές σε κατηγορίες θα μπερδευτεί και θα ανοίξει μια νέα αναφορά την οποία μετά αναθέτει στον διαχειριστή του συστήματος GNATS. Έτσι η απάντησή σας θα μείνει αφανής μέχρι να ψάξει κάποιος για αναφορές που είναι καταχωρημένες λάθος και να τις ξεκαθαρίσει, κάτι που μπορεί να γίνει μετά από μέρες ή και ολόκληρες εβδομάδες.

  Λάθος τρόπος:

      Subject: that PR I sent

  Σωστός τρόπος:

      Subject: Re: ports/12345: compilation problem with foo/bar

Αν η αναφορά προβλήματος παραμένει στην κατάσταση open παρόλο που το πρόβλημα έχει σταματήσει να εμφανίζεται πλέον, απλώς στείλτε μια απάντηση στην αναφορά (με τον τρόπο που αναφέραμε παραπάνω), εξηγώντας πως ή πότε διορθώθηκε το πρόβλημα.

## Αναφορές

Παρακάτω θα βρείτε κάποιες πηγές που είναι σχετικές με το θέμα των αναφορών προβλήματος. Δεν είναι μια πλήρης ή επαρκής λίστα, φυσικά.

- How to Report Bugs Effectively—μια πολύ καλή έκθεση από τον Simon G. Tatham που περιγράφει πως μπορείτε να γράφετε χρήσιμες αναφορές προβλήματων (όχι μόνο για το &os;).

- Problem Report Handling Guidelines—χρήσιμες πληροφορίες για τον τρόπο με τον οποίο χειρίζεται τις αναφορές προβλημάτων η ομάδα ανάπτυξης του &os;