On Fri, 2009-07-17 at 12:12 +0800, Jens Jacobsen wrote: > RE: "Yet .NET *itself* is most certainly NOT GPL-compatible (unless you take > the "system-supplied software" route, in which case you can ponder the > equivalent Java case), yet you can load both .NET AND the MySQL data > providers into the same address space (in fact, you must do so unless > you use Mono)." > > First there is the question of who is calling who. > .NET will work perfectly well without the MySQL provider loaded. We > can therefore conclude that the MySQL provider is extending the .NET > base libraries (not the other way around).
Yes. But... .NET provides a way to runtime register ADO.NET providers without "static" references via Reflection, and exposes a mechanism to do this via DbProviderFactories.GetFactory() and DbProviderFactories.GetFactoryClasses(): http://msdn.microsoft.com/en-us/library/h508h681.aspx http://msdn.microsoft.com/en-us/library/system.data.common.dbproviderfactories.getfactoryclasses.aspx So IF you have a .exe.config file which registers the MySQL ADO.NET provider with the runtime (a one line entry in an XML file), then "magically" System.Data will know about the MySQL ADO.NET provider, and will return the type when prompted. This is part of ADO.NET's design, NOT MySQL's. Thus, the user's code need not directly reference MySQL types *anywhere* (opting instead to use the System.Data interfaces), and in fact the provider could be changed dynamically at runtime (simply by asking for a different provider, the name of which could be stored in a .config file). So saying that there's a clear-cut dependency on MySQL is a bit of a stretch... > This is legal because the > .NET standard libraries are "System Libraries" and therefore an > exception to the GPL requirements. I don't think so. .NET was not part of the operating system until Windows Vista, and there are a number of Windows 2000 and XP machines running around that still don't have .NET installed (which is why installers for .NET-based programs need to bundle the .NET framework, to ensure that it gets installed). For Vista and beyond, sure, .NET is part of the operating system, but I really don't think you can make the case for older Windows versions. > DbLinq is explicitly designed to support MySQL (as a plug in) Eh? It provides glue code to use MySQL SQL dialects, and need not actually be the "official" MySQL provider. For example, Mono provides an MIT licensed MySQL provider, which DbLinq could use. > and therefore it calls and extends the MySQL provider, I think we have different definitions of "extend." No derivation is performed on the MySQL provider, no methods are overridden. It does (indirectly) call the MySQL provider (via System.Data interfaces), but that's the extent of any such use. > therefore DbLinq is > a program designed to load a GPL licensed plug in and hence DbLinq > must therefore in its current form be considered GPL (not MIT). It's designed to load any library that implements the System.Data interfaces. Is it DbLinq's fault that MySQL decided to implement the standard System.Data interfaces? Does making use of an existing set of interfaces automagically make it need to conform to the set of licenses for all potential plugins? I really don't think so. Now, if MySQL decided to drop support for the standard interfaces, AND DbLinq added support for MySQL's proprietary interfaces, then I could see that "DbLinq is a program designed to load a GPL licensed plug-in." Barring such stupidity, I really don't see it. > Second there is the question of who is calling what. > DbLinq is calling interfaces on the MySQL provider that will only work > if it is in fact the MySQL Data Provider that is loaded, this is not > necessarily a problem. You are allowed to do exactly this through the > ODBC interfaces for example without being subjected to the GPL. > However in this case DbLinq is not calling through ODBC but through > loading of a specific GPL licensed component and this means > distribution is not legal without licensing under GPL. Er, what? So actual .NET interfaces should be treated differently from a different set of interfaces (ODBC), even though they exist to serve the SAME purpose (DB-independent interaction protocol) and both result in the loading of GPL-licensed code into your address space? That makes NO sense to me. Why should ODBC be special in this way? For example, with this argument you're claiming that the following program snippet must be licensed under the GPL because it COULD be used to load MySQL: class WTF { public static void Main (string[] args) { var connection = (System.Data.IDbConnection) System.Type.GetType(args [0]); } } How's it load MySQL? app.exe "MySql.Data.MySqlClient.MySqlConnection, MySql.Data" This is what you're arguing -- that the above app MUST be GPL'd because it CAN be used to load a GPL'd ADO.NET provider which conforms to the STANDARD ADO.NET interfaces. Granted, DbLinq uses more interfaces than just IDbConnection, but it still sticks to just the ADO.NET interfaces, and NEVER uses the actual MySQL types directly (and again, nor does it need to; it could instead be using Mono's MIT-licensed MySQL driver instead!). > Finally the question of is it legal to redistribute an unmodified > version of DbLinq if your application is not designed to work with > MySQL or Ingres but will in fact only work with Oracle (or something > not GPL). > This is a gray-zone for sure, since it depends on how is the potential > MySQL usage "disabled". Is it through "not tested with" or is the > program actively disabling loading of MySQL and Ingres providers. Most people would go the lazy route and just not test it. Many people also use stored procedures, which would (by definition) exist only on the database they're using. Would this have any impact on your analysis? (I'm assuming not, because you could still port those stored procedures to MySQL, so you could still eventually load the GPL'd MySQL providers, so you should still be GPL! Crazy.) > The problem as I see it is that if your program "Might" work with > MySQL you must be under the GPL. And this would be bona-fide insane. Believing that Obama can't be President because he wasn't born on American soil crazy. Again, by this argument ALL ADO.NET using apps MUST be GPL because they might, some day, maybe, load the MySQL ADO.NET drivers. Crazy. - Jon --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "DbLinq" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/dblinq?hl=en -~----------~----~----~----~------~----~------~--~---
