My manager and myself were having an informal chat about the various RIA frameworks and platforms out there. To be honest, I wasn't convinced about Flex and so, we kept on discussing the pros and cons, and it turned out that I learnt a bit about Flex this way. One of the points we discussed was that Flex is not open source. He said "It's not open source, but it is as close to it as it can get."
I was intrigued by this and did some homework.
Update : You may want to read the updated remarks at the end before reading the whole passage.
What is Flex?
Before we discuss licensing, it is important to be clear on what we are talking about.
For those who don't know what Flex is - it is a framework to create interactive applications for the web.
Framework : It consists of a language, libraries, tools (including compiler, debugger, IDE), client player - the whole works.
Interactive : It is not a page-based model, it is more in the event-loop (GUI) model.
Web : Flex applications are SWF files which run on the Flash Player, which is installed on almost all computers connected to the web today.
What are the parts of Flex?
There are two basic things we need to create a Flex application:
- The Flash Player
- The Flex SDK
Licensing of the Flash Player
We need the Flash Player installed to run the SWF files.
There are two sides to this:
"You may not use the Specification in any way to create or develop a runtime, client, player, executable or other program that reads or renders .swf files."
This means that you can use the specification to write a program that exports to SWF but you cannot write a program that can play the SWF files.
(b) The Flash Player itself
The latest Adobe Flash Player 9 is available for Windows, Mac OS X, and recently for
Linux as well. This is perhaps the only platform that
is cross-platform and works well for a plugin that is just 1.1 MB in size. What else can claim to be
installed on 98% of desktops connected to the
Licensing of the Flex SDK
The Flex licensing was surprisingly short and to-the-point:
Subject to the terms and conditions of this Agreement, Adobe grants Licensee a non-exclusive, nontransferable ilcense to
(a) use the SDK Components for the sole purpose of internally developing Developer Programs
(b) use the SDK Components as part of Licensee's website for the sole purpose of compiling the Developer Programs that are distributed through the Licensee's website
(c) modify and reproduce SDK source files for use as a component of Developer Programs that add Material Improvements to the SDK Source Files
(d) distribute SDK source files in object code form and/or source code form only as a component of Developer Programs that add Material Improvements to the SDK Source files, provided that
(1) such Developer Programs are designed to operate in connection with the Adobe Flex Builder, Adobe Flex Charting, Adobe Flex Data Services Software, or the SDK Components
(2) Licensee distributes such object code and/or source code under the terms and conditions of an EULA
(3) Licensee includes a copyright notice reflecting the copyright ownership of Developer in such Developer Programs
(4) Licensee shall be solely responsible to its customers for any update or support obligation or other liability which may arise from such distribution
(5) Licensee does not make any statements that its Developer Program is "certified", or that its performance is guaranteed, by Adobe
(6) Licensee does not use Adobe's name or trademarks to market its Developer Programs without written permission of Adobe
(7) Licensee does not delete or in any manner alter the copyright notices, trademarks, logos or related notices, or other proprietary rights notices of Adobe (and its licensors, if any) appearing on or within the SDK Source Files and/or SDK Components, or any documentation relating to the SDK Components
(8) Licensee causes any modified fields to carry prominent notices stating that Licensee changed the files
(9) Licensee does not use "mx", "mxml", "flex", "flash" or "adobe" in any new package or class names distributed with the SDK Source Files.
Any modified or merged portion of the SDK Source Files is subject to this Agreement.
Note: "Developer Programs" shall mean programs that are built consisting partly of the SDK Source Files and partly of user's Material Improvement to add or extend the SDK Source Files.
Basically, Flex is as close to open source as it can get. It is already source-open i.e. the source is freely available. You can modify it and use it for your own purpose. If you want to redistribute it, then you are responsible for it (and not Adobe).
I think that's a fairly open license, but does it satisfy the OSI criteria?:
- Free redistribution - yes
- Source code - yes
- Derived works - yes
- Integrity of the author's source code - yes
- No discrimination against persons or groups - yes
- No discrimination against fields of endeavor - yes
- Distribution of license - yes
- License must not be specific to a product - no
- License must not restrict other software - grey area (it's in fact reverse, see (d)(1))
- License must be technology-neutral - no
Disclaimer: IANAL. This is just my understanding.
I guess the only part where this license is not compatible with open source licenses is that this license is specific to Flex and is not a general license.
It seems to me that Adobe's business model around Flex is somewhat similar to Trolltech around Qt. Qt is free (as in GPL) for free projects and is commercial for commercial projects. Similarly, Flex (SDK) is free (as in 'open') for anybody who wants to use it but is paid for enterprises who want to do enterprise-level-kind of stuff (such as they need an IDE or need data services management or need charting components).
Let's take a look at the stack again:
The Flash Player is 'free as in beer'.
The Flex SDK has an open license.
The Flex Builder IDE, Flex Data Services and Flex Charting components are paid products. This is where Adobe makes its money. And Flex Builder IDE (based on Eclipse) is a very compelling product which really does make writing Flex applications easy.
I guess Adobe will never make the software fully open source, otherwise how will we ever make money? But I think in general, Adobe tries to strike "a good balance between what's good for the community and what's good for the shareholders".
"Q: Will Apollo run on Linux eventually as well? I've only heard Windows and Mac mentioned"
"A: Yes, absolutely. I don't have the the date in front of me (laughs) when that'll be available, but Linux is certainly one of the key platforms that we are targeting. Love to get feedback from the group on which distributions are most important to you, but for the first release in first part of next year, we expect to be supporting Linux as well."
This is important because this gives Linux an equal footing with all platforms - developers can develop a single application and deploy on all the platforms without a single line of code change - the very promise of Java - 'write once, run everywhere', only in this case, it seems more feasible.
Overall, I think Adobe and Flex are poised in a good way, licensing wise, although there is room to be more open.
Manish pointed out a couple of things:
1) I thought only the framework was "open", not the entire SDK (which includes the tools--compiler, debugger, etc.). Am I right?
2) To what extent is the framework open? Can I modify the source files and redistribute it without Adobe's permission, as long as "I am responsible for it (and not Adobe)"?
I think (1) is true in that the framework code is source-open but the tools are NOT.
I do not know the correct status of (2) since it was purely my interpretation of the licensing terms and I have not confirmed this with anyone.
Coming back to (1), I think that causes a lot of restrictions on how much Flex can be changed since a user can only use the tools and not modify them. This caused me to reconsider the openness of Flex - I think Flex is "not open enough". Technology-wise, it has amazing capabilities but openness wise, I don't think it can be really considered open.
I know I've been drawing a lot of flak for this post, but I think it was a necessary evil. Necessary because I needed some feedback on what I might have overlooked and this is exactly the kind of feedback that I got, which I'm happy about. To reiterate, this was about me trying to understanding the licensing and openness of the Flex sphere, and it was not really related to competitors.
Disclaimer : I work at Adobe, but these views are my own opinion, and do not represent any official position/interpretation.
Update : There are now beta versions of Flash Player 9 for Linux available from Adobe Labs to support Solaris on both x86 and Sparc CPU architectures.