MapFish and Google Earth API
I’ve not seen much Google Earth API plugin use that makes me think it is anything more than a way to put 3D pushpins on a webpage, but the latest MapFish demo looks interesting.
There’s a full real-time interaction between MapFish and GE. Translation and rotation of special MapFish tool moves GE camera. Panning and camera tilting on GE side moves MapFish tool.
Just working a little with the JavaScript API and you can do some really neat things. Nothing unique about MapFish in this example, but if you haven’t been following MapFish lately, you need to put it on your radar.

MapFish on the left, Google Earth API on the right.


MapFish is a very cool and promising project. However, their dependence on Ext for the JS framework is a deal breaker for me. Specifically, Ext has an convoluted licensing history where they have switched open source licenses multiple times within the past year. Currently, Ext is using the GPLv3 — meaning that unless you shell out for Ext’s commercial license (starting at ~$300), you may be obligated to release your own application under the GPLv3.
In fact, I doubt you could legally use MapFish on a website with the Google Earth plugin without purchasing the commercial license. One may be obligated to relase the GE plugin under the GPLv3 (pursuant to section 5), a right that the developer doesn’t possess, thus putting them in violation of both the GPLv3 and the Google Earth APIs Terms of Service.
So, in my opinion, while MapFish possesses great potential, it is built on top of a legally ambiguous and murky foundation that could come to haunt adopters (e.g., when Ext when explores litigation as a revenue model).
I’m uncertain how to proceed after that first comment!
I simply wanted to add that the split interface, which is reminiscent of the MapChannels dual-screen using the GE plugin, makes perfect sense in a visualization context. It’s the first time I’ve happened upon a tool that displays not only the direction of the viewpoint but the distance as well. Professionals looking at viewshed analysis would appreciate the quick overview provided by this tool.
Regards,
-Matt
I’d like to react to Justin’s comment regarding Google license. Our demo being based on Ext, and Ext being GPLv3, our demo is under GPLv3. And I don’t see how this violates the Google license, particularly if the demo is freely accessible. Could Justin or anyone elaborate?
On the GPL issue, wouldn’t it be enough to separate out the Ext component and require users to download it separately? As MapFish is itself released under GPL anyway, this may be an issue for the MapFish guys, but not necessarily for anybody simply downloading and using the GPL MapFish stuff alongside other libraries e.g. Google Maps or plugins etc.
My understanding is that as a user, if you (a) download GPL stuff directly from the people who produce it e.g. MapFish, and (b) don’t make any changes to the downloaded GPL stuff yourself or try to pass it on, then your own code should not suffer from GPL contamination.
If you’re producing software, then the easiest option is not to include/integrate the GPL stuff in your own deliverables but require it to be downloaded by your customer directly from the GPL source separately. That way you are never delivering GPL code to anybody in the first place. Probably overkill, but that seems to be the usual workaround to avoid GPL contamination anyway.
But check with somebody who knows! Any IT lawyers out there?
Cedric,
When ‘distributing’ anything under the GPLv3, you must distribute any components included in the distribution under the terms of the GPLv3. This “Share-Alike” clause is the primary difference between licenses like the GPL and permissive licenses like BSD. The wording in GPLv3 for ‘Convey’ is:
“To “convey” a work means any kind of propagation that enables other parties to make or receive copies.” (0. Definitions of GPLv3)
“Conveying under any other circumstances is permitted solely under the conditions stated below.” (2. Basic Permissions)
“c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy.” (5.c Conveying Modified Source Versions.)
The GPLv3 requires you to give the source code of the *entire application* to any derivative work of a GPLv3 licensed piece of work.
The end result is that in order to comply with the GPLv3, you *must* distribute the source code to the Google Earth plugin — unless, of course, you have purchased Ext commercial licenses for your organization/developers.
Justin,
Ext’s current licensing scheme is reasonable for what it is — a company making money off selling a Javascript framework. If you’re an organization selling an application, the rate is pretty cheap, and Ext offers a lot for the money. As an open source project, GeoExt has a perfectly viable path forward as being GPLv3 when combined with other Open Source software — and if that’s not what you want, at least you have the *option* of commercial licensing, which you don’t have with most other GPLv3 libs.
That said, my avoidance of all things GPL — stemming largely from the fact that I don’t like the annoyance of having to produce a “Source” for any Javascript code I might have written/compressed into OpenLayers — has also caused me to shy away from Ext in my ‘home’ life. (At work, I have a commercial license available.)
ChrisW:
The problem with that assumption is that in order to have customers use Javascript code, you are ‘distributing’ to every user of the application. The ‘binary’ code is transferred from my server to your computer, and run on your computer. As such, I am distributing it, and I must comply with the GPLv3 to anyone that I make my web application available to. That means my application code goes to them — and if my application includes Google Earth, then Google Earth would have to be part of the package.
(I’m not a lawyer, but I *have* talked about these issues with people at the FSF in similar cases. Living down the block means that I usually end up drinking beer with them on weekends.)
Ext is distributed under the GPL+FLOSS. Ext requires that any derived work be licensed under the GPL or one of our FLOSS Exceptions. In this specific example, Ext is part of a much larger aggregate work. As such, “the GPL permits you to create and distribute an aggregate, even when the licenses of the other software are non-free or GPL-incompatible. The only condition is that you cannot release the aggregate under a license that prohibits users from exercising rights that each program’s individual license would grant them.” – from the FSF
Thanks Abraham for this clarification. You can find explanations about the GPL licenses here: http://www.gnu.org/licenses/gpl-faq.html#MereAggregation.
BTW, I would also appreciate any comments about the technical aspects of this demo and the pertinence of the user interaction
Abraham: Are you trying to state that this work is ‘mere aggregation’? Aggregation being defined as:
‘A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate”’.
Trying to make the argument that Javascript libraries which call each other are “mere aggregation” is simply misleading. The libraries communicate through APIs, are at the very least included in the page together, and sometimes even put together into the same ‘compiled’ file. Aggregation is simply not relevant in this case.
What Aggregation is about is sticking MapFish and proprietary code on the same CD — not about using them together. This is *not* aggregation.
Cedric,
I can’t use the Google Earth plugin on my machine — I don’t think there’s a Linux version yet, anyway. So I can’t comment no that.
The GE linux plug-in doesn’t exist for now, but a MAC or a Windows GE plug-in is available: http://code.google.com/apis/earth/documentation/#install
@Chris Schmidt: Thanks for your clarifications. But I’m still not convinced that simply delivering a JavaScript library via a web-page breaks the “aggregation” rule (provided you don’t modify it and sell your modifications). Otherwise it would be impossible to use any GPL JavaScript libraries, because they’re all delivered and executed in this way. The technology is way ahead of the law here, as usual. But until some poor soul gets hauled through a courtroom to resolve these questions, maybe you’re right – best to avoid GPL2/GPL3 stuff altogether if you’re in any doubt.
ChrisW: “Otherwise it would be impossible to use any GPL JavaScript libraries, because they’re all delivered and executed in this way.”
Not at all. It would just be impossible to use Javascipt libraries under the terms of anything other than the GPL — which means you need to distribute your software as well. This is exactly the kind of situation the AGPLv3 was designed to create on the server side: The GPL wasn’t considered ’strong enough’ with many things moving into the ‘cloud’, so the AGPLv3 is designed to require that you share your source code even when you *don’t* ‘distribute’ your application, just make it accessible to people.
The key things that determine aggregation vs. linking, as described by the FSF, are the use of APIs. A comparison from a more sane/well known language setup is whether importing modules in Python is considered mere aggregation. A Python ‘import’ statement is like a <script> tag in Javascript: including a library for use. Then functions provided by this module are callable. Though there is some debate on this topic as well (as with all things legal-related in absence of case law), the general agreement is that this is *not* aggregation, but is linking instead. (Very few modules are licensed GPL — generally speaking, Python is licensed in a permissive manner, following the nature of Python itself.)
Essentially, the way the GPL intends to make this work from a legal perspective is by saying “We copyright our library. By copyrighting our library, we are making a creative work — function names, parameters, etc. are copyrighted. If you use these function names in your code, you are creating a derivative work.” Derivative works are exactly what the GPL intends to cover.
That said, if Ext is encouraging use in this manner — regardless of the GPL — then it doesn’t matter if Ext is GPL licensed or not, because the only people who can legally sue you for violation of their copyright are the copyright owners. As far as I know, Ext is not an open development project, so the copyright owners are Ext, which means that they can make statements about their interpretation of the license, and if you do not expect that interpretation to change, you’re okay… but if you’re commercially dependent on it, it might make sense to ask to get it in writing. (Or just buy a license, which removes any doubt.)
I will point out that if this ever went to a court case, I’m not sure I agree that “importing is linking” would actually be legally accepted in court — but it *is* the position of the GPL proponents I talk to, so my feeling is simply that the GPL interpretations that are in vogue at the moment — based on my understanding of them — would state that this use of Ext is a violation of the GPL, and that even if it’s not, legally speaking, the idea that it could be *is* something that the FSF could want as an option, since they wrote the AGPLv3 specifically to handle making cases like this more clear that you’re limited by the GPL.
Cedric: Right, at the moment ‘my computer’ is Linux, and will be for another week or so.
This is the problem with depending on proprietary components, I tell ya
Justin, I certainly trust you on the legal interpretation, but would it not be appropriate to disclose in this forum that you are the developer of a competing “GeoWeb” framework?
Sean,
How is that relevant? Should I disclose that I am a MapFish user, or a participant in the GeoExt mailing lists? Or that I work on OpenLayers? Is that important to the discussion of whether the use of GeoExt within commercial applications or alongside proprietary applications may be problematic?
Also, considering GeoDjango and MapFish as ‘competitors’ seems odd to me; they do different things well, they don’t compete at the same tasks. This is especially true with regard to the client side developments that this discussion applies to.
James,
You have done a great job with this demo. I apologize that your comments were hijacked to discuss the merits of open source licensing.
The demo code that reflects the integration between Mapfish/Ext and GE is licensed under a FLOSS license. This allows other developers the freedom to obtain the code, modify it for their usage, and redistribute it. That is what is most important to us. As such, Ext is proud to be associated with the Mapfish project and its community members. Keep up the good work.
I can’t take credit for that demo, it is all Mapfish. I’m just linking to it.
Impressive stuff to be sure though.