It seems that when Microsoft was looking to build its new ODF plugin, it took a short cut. It seems to have grabbed some code from the OpenDocument Fellowship's program that converts ODF to HTML, written by J. David Eisenberg. His code is released under a dual license, the LGPL and the Apache 2.0 license. Microsoft has put it into its ODF plugin, which is licensed under the BSD license. Is that allowed?
It's nice Microsoft endorses the value of the ODF Fellowship code, since they are forever telling us their own code is better. But we're trying to parse out which license Microsoft thinks it is complying with. Not the LGPL, I trust. My question, and I'm no Apache guru, is what about Apache sections 4.1, 4.2, 4.3, and maybe 4.4, plus the required form of notice in the Appendix? It's certainly possible I'm missing something. But it seems it may be Microsoft that neglected to notice some requirements.
I know. It's so funny. Naturally, David will be filing a major lawsuit asking for billions and gazillions in damages. He'll probably wait about 5 or 6 years though, until lots of folks are using the Microsoft plugin, and in the interim, he'll donate some code to the Microsoft project and distribute it himself, and *then* he'll announce he's shocked, shocked to discover his code inside the Microsoft plugin, call a press conference and let the media know he will be suing Microsoft. They have deep pockets, after all, and he has to consider his shareholders. A man can't just sit around the camp fire singing Kumbaya when there's money to be made. And of course he'll also have to sue corporate end users and petition the courts to shut down their businesses under the DMCA, and he'll issue sanctimonious press releases about his stolen Most Holy IP and how Microsoft is made up of a bunch of lunatic fringe criminals who don't respect other people's intellectual property. Maybe he can grab some headlines by sending a letter to Congress. Those Congress critters need to know how dangerous and damaging Microsoft is to the economy, don't you think? And then, presto! David's stock will take off to teh moon! NOT. He isn't planning on suing anybody, and he's glad to have people use the code, if they find it useful. After all, we're all trying to find a way to interoperate with Microsoft so the world will have an easier time of it. There may need to be some adjustments made to get fully in harmony with license terms, though. For one thing, they didn't spell his name right. It wasn't David's intention to release his code under the BSD license. He gave me this statement: "I'm not the world's biggest fan of BSD, as it allows proprietary
commercial use of freely-given software. Nonetheless, since this code is
fairly obvious (anyone solving the problem independently would have come
up with almost identical code), and they want it, I guess I could work it out to let them use it
under BSD. Please fix the typo on my surname; I'm certain there's no H in
it (obligatory Heisenberg joke)." The Apache license terms could be followed more exactly, or, if necessary, David could grant special permission to use the code under the BSD license, which would probably qualify him for an award for having the most licenses on any
15-line piece of code.
If you'd like to compare what Microsoft did with the two licenses that this code is released under, here are the Apache 2.0 license terms. And here's the LGPL. You can download Microsoft's plugin code here. The Fellowship plugin written by J. David Eisenberg is here. Both are zip files. Open them both up, and compare Microsoft's OdfConverter/source/OdfConverterLib/resources/document.xsl line 430 onward with
David's odt_to_xhtml/odt_to_xhtml.xsl beginning with line 453 and here's what you'll see -- at a minimum, some sweet inspiration. Note I had to change the lines to put the code inside this kind of brackets -- [] --instead of the usual because otherwise Geeklog kept stripping out all the code. ********************************
| Microsoft |
David |
[!-- Extra spaces management
from J. David Heisenberg --]
xml:space="preserve"]
[/xsl:variable]
[xsl:template name="extra-spaces"]
[xsl:param name="spaces"/]
[xsl:choose]
[xsl:when test="$spaces"]
[xsl:call-template
name="insert-spaces"]
[xsl:with-param name="n"
select="$spaces"/]
[/xsl:call-template]
[/xsl:when]
[xsl:otherwise]
[xsl:text] [/xsl:text]
[/xsl:otherwise]
[/xsl:choose]
[/xsl:template]
[xsl:template name="insert-spaces"]
[xsl:param name="n"/]
[xsl:choose]
[xsl:when
test="$n [= string-length($spaces)"]
[xsl:value-of
select="substring($spaces, 1, $n)"
xml:space="preserve"/]
[/xsl:when]
[xsl:otherwise]
[xsl:value-of select="$spaces"/]
[xsl:call-template
name="insert-spaces"]
[xsl:with-param name="n"]
[xsl:value-of
select="$n - string-length($spaces)"/]
[/xsl:with-param]
[/xsl:call-template]
[/xsl:otherwise]
[/xsl:choose]
[/xsl:template] |
[xsl:variable name="spaces"
xml:space="preserve"]
[/xsl:variable]
[xsl:template match="text:s"]
[xsl:choose]
[xsl:when test="@text:c"]
[xsl:call-template
name="insert-spaces"]
[xsl:with-param name="n"
select="@text:c"/]
[/xsl:call-template]
[/xsl:when]
[xsl:otherwise]
[xsl:text] [/xsl:text]
[/xsl:otherwise]
[/xsl:choose]
[/xsl:template]
[xsl:template name="insert-spaces"]
[xsl:param name="n"/]
[xsl:choose]
[xsl:when
test="$n [= 30"]
[xsl:value-of
select="substring($spaces, 1, $n)"/]
[/xsl:when]
[xsl:otherwise]
[xsl:value-of select="$spaces"/]
[xsl:call-template
name="insert-spaces"]
[xsl:with-param name="n"]
[xsl:value-of
select="$n - 30"/]
[/xsl:with-param]
[/xsl:call-template]
[/xsl:otherwise]
[/xsl:choose]
[/xsl:template]
|
|
|
|