> Assumption: only the "official owner" of log4net should be > able to sign the log4net.dll assembly with the "official" > public/private key pair.
That is the key point we need to decide. Does this assumption hold for open source projects? Or should _everything_ required to build an identical copy of the assembly be released? Is the private key part of the source? It is a given that if the private key were to be opened then the identity guarantees of the strong name would be lost. However I believe that this is the same for all Apache projects regardless of which language they are written in. > Now, as a local user of the log4net assembly I may uncover a > bug or need to change the code. I have these options: > > 1. Report the bug and wait for a fix. > 2. Fix the bug myself. > 3. Request the new feature and wait for it to be rolled into > the official distribution. > 4. Add the feature myself (and like someone already > mentioned, but a good open source citizen and send that code > to the log4net team for consideration). > > In the case of (1) and (3) the "signed assembly problem" isn't. > Eventually I'll get an assembly with the official key pair > and off I go. > > In the case of (2) and (4) I'd have to create my own key pair > to build my own (hopefully temporary) version of log4net.dll. This assumes that you have control over the application that uses the library. If you need to rebuild the library, but you cannot rebuild the application that binds to it, then there is nothing you can do. You have to either get a new version of the library signed by the publisher, or get the application vendor to rebuild the library with your changes (and they sign the library with a new key). At this point I should reiterate that the end user cannot change the binding on their machine - the only local binding redirects allowed are between versions, not between strong names. So in effect the user gets whatever the application developer decides is best for them and they have no option to replace libraries on their machine. From the application developer's point of view this is a good thing but from the user's point of view this is curtailing their freedom. This is a form of DRM for application dependencies. Is this in the spirit of open source? It is the unofficial position of The Apache Software Foundation that the Apache license is compatible with the GPL [1]. The GPL (with its anti-DRM stance) would not see a privately held strong name key as producing a 'free software' product. [1] http://www.apache.org/foundation/licence-FAQ.html#GPL Having said all that I also think that a typical .NET application developer would expect the private key for the strong name of libraries that they are using to be held securely private. After all that is what they themselves are doing with their private keys, and that is what Microsoft have told them to do. So we need to ensure that we are not going to do anything that will adversely affect the suitability of the log4net library to be used in 3rd party applications. Cheers, Nicko