What is the distinction between "open source software", "freeware", "public domain" and "shared source"?