Proprietary software, or software in which the code is hidden and protected (which is what most of us are used to using), might be compared to a car with a sealed engine compartment, limiting the users ability to diagnose, fix, or improve on their purchase, and requiring the manufacturer to be involved in any problem solving. Like this protected car, proprietary software can be very functional and have real value to the user. There are some real drawbacks, however, to this model:
1. Programmers or students are limited in their ability to to learn both how the software and their computer work (just as with a sealed-engine car, there can only driver's training courses, but not shop classes).
2. Users have a limited ability to address problems or errors that arise, as they require the manufacturer's involvement to be fixed, and which is done on the manufacturer's timetable (like having to take your car to a special, authorized dealer for any work).
3. Manufacturers can go out of business, or can determine that they will no longer support existing software, leaving the users without any support or requiring that they purchase new software (like having to a car the manufacturer will no longer service).