Guiding principles for public software