Once upon a time, distributing source with operating systems was done
rather frequently. Customers agreed not to distribute any portion of
the source to those outside their legal control and to those
internally who didn't need it. At least one company distributed the
source in a code management form; we found this nice because we could
distribute bug fixes and such on public forums.
This worked well for both the customers and the vendors. We (the
customers) found numerous bugs which were reported to all along with
the fixes. we suggested enhancements which the vendor could get
either for free or for some cost (depending on the company). Some of
the large performance improvements were a result of work done at a
customer site. The customers could add that really specific company
required hack where it best fit instead of trying to bend everything
else. Finally, the dialog between vendor and customer improved and
the frustration level went down.
If done properly, source code release benefits both the vendor and
customer. Sites always have site specific requirements; we do. I
don't expect our vendors to custom write code for us; I greatly
appreciate their assistance when trying to determine where to tweak
the code. I also report bugs (real or potential) when I find them.
The problem with source code release is that some tended to not
respect the agreements. Some sites tended to go overboard with
modifications which made the support issues more significant for the
vendors; especially when the site didn't have good people supporting
the systems. Some places tended to make slight modifications and
remarket code. Source code release requires trust and confidentiality
on both sides. The other hassle with source code release is that many
of the systems are now made with code use agreements with other
companies. If you don't have "pure we-made-it-here" code, it gets
difficult to split out what is yours or someone else's.