Η κύρια διαφορά είναι στο ότι με ένα λογισμικό κλειστού κώδικα δεν σου παρέχεται ο πηγαίος κώδικας οπότε αν εσύ θελήσεις να κάνεις μία αλλαγή σε αυτό το λογισμικό δεν μπορείς και θα πρέπει να απευθυνθείς στην εταιρία που έφτιαξε (συνήθως) το πρόγραμμα για να σου κάνει την αλλαγή/διόρθωση.
Σε ένα λογισμικό ανοιχτού κώδικα σου παρέχεται όλος (αναλόγως το license) ο πηγαίος κώδικας οπότε σου δίδεται η δυνατότητα αφενός να αλλάξεις κάτι που πιθανόν θες στο πρόγραμμα και αφετέρου να δεις τον κώδικα του και να καταλάβεις ακριβώς πως λειτουργεί.
Πέρα από το γεγονός ότι επί το πλείστον τα προγράμματα που είναι ανοιχτού κώδικα είναι ελεύθερα (και ως προς το κόστος αλλά και ως προς κυρίως τις ελευθερίες που σου παρέχουν να τα κάνεις «ό,τι» θες) γενικά μεγάλα projects ανοιχτού κώδικα όπως το GNU/Linux, η PHP, ο Apache κλπ έχουν το πλεονέκτημα τις αυξημένης ασφάλειας και γρήγορης ανταπόκρισης σε κενά ασφαλείας που ανακαλύπτονται.
Αυτό γίνεται γιατί ο κώδικας είναι διαθέσιμος οπότε μπορεί ο καθένας να τον διαβάσει και να πειραματιστεί μαζί του με αποτέλεσμα να μπορούν να βρεθούν περισσότερα bugs και δεδομένου ότι μπορεί κάποιος να τα διορθώσει μόνος του αν έχει τις γνώσεις μπορούν τα προγράμματα αυτά να ενημερωθούν άμεσα.
Σε αντίθεση με τα
Windows 
για παράδειγμα ή κάποιο άλλο πρόγραμμα κλειστού κώδικα, αν εμφανιστεί ένα κενό ασφαλείας τότε αναγκαστικά πρέπει να περιμένεις την
Microsoft 
ή την κάθε εταιρία να βγάλει το update που θα διορθώνει το πρόβλημα.
Περισσότερες και πιο εμπεριστατωμένες λεπτομέρειες για το θέμα μπορείς να βρεις εδώ στα Ελληνικά:
http://mathe.ellak.gr/
Εδώ πιστεύω απαντάει ακριβώς στο ερώτημα σου:
Ελεύθερο Λογισμικό / Λογισμικό Ανοικτού Κώδικα: τι είναι και ποια τα προτερήματα του έναντι του Ιδιόκτητου Λογισμικού
http://www.enlogic.gr/other/floss/ellak.html