aboutsummaryrefslogtreecommitdiff
path: root/content/posts/2008-05-15-don-t-use-extjs.html
blob: 80ad15f0a482e52fe2aaa6fe3414103f3d6415a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
---
date: "2008-05-15T07:26:16Z"
title: Don't Use ExtJS
---

<p><style type='text/css'>
  blockquote.quote {
    font-family: arial, verdana, helvetica, sans-serif;
    border-left: 2px solid #09d;
    padding: 10px;
    background-color: #efefef;
  }
</style>
A couple of years ago I <a href="http://pablotron.org/?cid=1512">recommended</a> <a href="http://developer.yahoo.com/yui/">YUI</a> and <a href="http://extjs.com/">Ext</a> (formerly
YUI-Ext).  I've changed my mind.  Don't use Ext at all.  The Ext license
has changed four times since its inception, and each time the license
has become more restrictive.  </p>

<h2>History</h2>

<p>Ext was originally created as an extension to YUI.  It was
<a href="http://www.opensource.org/licenses/bsd-license.php">BSD</a>-licensed, just like YUI. YUI-Ext added several sorely-needed
features to YUI. The most notable additions were a layout system, a
<a href="http://en.wikipedia.org/wiki/Tree&#95;view">Tree View</a> widget and a <a href="http://en.wikipedia.org/wiki/Grid&#95;view">Data Grid</a> widget (YUI has since added
each of these, although the YUI widgets are still less flexible than
their Ext counterparts).  Eventually support was added for <a href="http://jquery.com/">jQuery</a>
and <a href="http://www.prototypejs.org/">Prototype</a> as well.  The team dropped the "YUI-" prefix, and
YUI-Ext became Ext.  </p>

<p>Ext 1.0 was relicensed under the <a href="http://www.opensource.org/licenses/lgpl-2.1.php">LGPL</a>.  Although switching from the
BSD license to the LGPL is relatively innocuous, it is still significant
because the LGPL is more restrictive than the BSD license.  </p>

<p>Eventually the Ext team changed the license again.  The new license was
a custom license that granted conditional LGPL <em>usage</em> rights.  Basically
the LGPL usage clauses applied, but only if you weren't trying to
develop a library or an Ext clone.  </p>

<p>Confused?  Yeah, me too.  Here's the text from the old Ext "Open Source
License":</p>

<blockquote class="quote">
  Ext is also licensed under the terms of the Open Source LGPL 3.0 license. You
  may use our open source license if you:
  <ul>
    <li>Want to use Ext in an open source project that precludes using non-open source software</li>
   <li>Plan to use Ext in a personal, educational or non-profit manner</li>
   <li>Are using Ext in a commercial application that is not a software
  development library or toolkit, you will meet LGPL requirements and you do not
  wish to support the project</li>
  </ul>
</blockquote>

<p>A lot of open source developers were <a href="http://en.wikipedia.org/wiki/Talk:Ext&#95;(javascript&#95;library)">understandably confused</a>
by this hybrid license.  The biggest problem was that it wasn't clear
whether this license was compatible with other Open Source licenses.  It
also wasn't clear whether Ext could be legally distributed with Open
Source software, since the license only granted LGPL <em>usage</em> rights, and
not LGPL <em>distribution</em> rights.</p>

<p>To address these complaints, the Ext team changed the license again:
the latest version of Ext is licensed under the <a href="http://en.wikipedia.org/wiki/GNU&#95;General&#95;Public&#95;License">GPLv3</a>.  This latest
change complicates things quite a bit for many users, as we'll see in
the next section.</p>

<h2>Problems</h2>

<p>The GPL is far more restrictive than the BSD license and LGPL.  It is
rarely used for libraries, because the viral clause would effectively
the library from being used for any non-GPL software.  In fact, these
problem were <a href="http://en.wikipedia.org/wiki/GNU&#95;General&#95;Public&#95;License#Version&#95;2" title="GPLv2 and the LGPLv2.">addressed over 16 years ago</a> by creating the LGPL:</p>

<blockquote class="quote">
  By 1990, it was becoming apparent that a less restrictive license
  would be strategically useful for some software libraries; when
  version 2 of the GPL (GPLv2) was released in June 1991, therefore, a
  second license - the Library General Public License (LGPL) was
  introduced at the same time and numbered with version 2 to show that
  both were complementary.  The version numbers diverged in 1999 when
  version 2.1 of the LGPL was released, which renamed it the GNU Lesser
  General Public License to reflect its place in the GNU philosophy.
</blockquote>

<p>Who is affected by this change?  In no particular order:</p>

<ul>
<li>Extension Authors: Older Ext user extensions could be licensed as
the author saw fit.  This is no longer true for the latest version
of Ext; new user extensions must be GPL-licensed, because the viral
clause prohibits using Ext with non-GPL licenses.</li>
<li>Commercial Users: The previous licenses, even the questionable 
custom license, allowed Ext to be used in closed source commercial
applications.  This is no longer true for the latest version of Ext,
because the viral clause prohibits using Ext with non-GPL commercial
licenses.</li>
<li>Non-GPL Open Source Developers: The BSD and LGPL-licensed versions
of Ext could be used with other non-GPL software.  This is no longer
true for the latest version of Ext, because the viral clause
prohibits using Ext with non-GPL licenses.</li>
</ul>

<p>Things get even murkier when you consider linking and distribution.
Does generating a dynamic page count as linking to Ext?  Does any public
web application automatically count as distribution?  What about
applications which use Ext to and access a common APi, such as a SOAP
endpoint or RSS feed?</p>

<p>These questions were posted in a 
<a href="http://extjs.com/forum/showthread.php?t=33096">thread about the license change on the ExtJS forums</a>.<br/>
Here's how <a href="http://jackslocum.com/blog/">Jack Slocum</a>, the primary Ext developer, <a href="http://extjs.com/forum/showthread.php?p=156236#post156236">responded</a>:</p>

<blockquote class="quote">
  <p>
    If you are generating any markup or javascript code via the server in a
    page SPECIFICALLY designed for Ext, then that server code will have to
    be GPL as well.
  </p>

  <p>
    For example:
  </p>

  <ul>
    <li>
      Suppose you have an index.php that includes Ext JS. According to the
      FSF, in that case index.php would be also under GPL since it is using
      ext. Since it must be GPL, it's source must be distributed. Since it
      is GPL, the "viral" effect of GPL is now in effect and any thing that
      uses index.php (if anything) on the serverside would also fall under
      the GPL. (Note: Note this is a pretty gray area)
    </li>

    <li>
      Suppose you are using server-side code to generate javascript that
      interacts with Ext JS. That code must also be GPL.
    </li>
  </ul>

  <p>
    Like MySql and other GPL software the way to use GPL code without
    having to license under GPL is to not bundle or distribute the GPL
    code with your application. If you instead have the end user
    (developer?) download and install ext js on their own, they are then
    bound to the license and not you or your software.
  </p>

  <p>
    For those seeking an FAQ, we have defined and explained some of the
    reasoning and license implications under these 2 pages:
  </p>

  <p>
    <a href='http://extjs.com/products/license.php'>http://extjs.com/products/license.php</a>
  </p>

  <p>
    <a href='http://extjs.com/company/dual.php'>http://extjs.com/company/dual.php</a>
  </p>

  <p>
    It's worth noting that the examples given at the beginning of this
    post are just my opinion and it is impossible for us to analyze
    everyone's usage and say whether or not someone "complies" with the
    GPL. That really is a task for an attorney or even someone with
    better knowledge of your application and how Ext JS is used.
  </p>

  <p>
    In the end, we want Ext JS to be open source friendly and still have
    a good business model in place to grow. The old Ext License was not
    open source friendly and pretty much killed all options for use in
    open source projects. That wasn't our goal so we had to address it.
  </p>
</blockquote>

<p>There are several problems with the statements above.  The biggest one
is that the original BSD license and subsequent LGPL license had none of
this ambiguity.  </p>

<p>In other words, the problem the Ext team is trying to fix is one they
created themselves.  If that wasn't bad enough, the solution actually 
hurts many Open Source developers far more than it helps.</p>

<p>In an attempt to clarify the situation for non-GPL Open Source
developers, I posted several questions in the Ext license thread.  I
also created a post on <a href="http://reddit.com/">Reddit</a> about the license change and
summarized my questions there:</p>

<blockquote class="quote">
  <p>
    As of page 8 of the thread on the license change I have yet to receive a
    response, simple or otherwise, to any of my comments:
  </p>

  <p>
    There's <a href='http://extjs.com/forum/showthread.php?p=156337#post156337'>this comment</a>:
  </p>

  <blockquote class="quote">
    The new license prevents Open Source software that is using a
    license other than the GPL from using Ext. Applications which use
    popular Open Source licenses like the LGPL license, BSD license, MIT
    license, and the Artistic license would be required to either
    re-license under the GPL, carefully design their application to meet
    the requirements in your post, use an older LGPL-licensed version of
    Ext, or move to another library entirely.
  </blockquote>

  <p>
    And <a href='http://extjs.com/forum/showthread.php?p=156356#post156356'>this one</a>:
  </p>

  <blockquote class="quote">
    What about authors who which to provide their software under a
    license that is more permissive than the GPL, such as the MIT or BSD
    licenses?
  </blockquote>

  <p>
    And <a href='http://extjs.com/forum/showthread.php?p=156382#post156382'>this
    one</a>, which was directly in response to Jack Slocum, the primary
    author of ExtJS:
  </p>

  <blockquote class="quote">
    <p>
      Hi Jack,
    </p>

    <p>
      I can see how switching to a license without exceptions would make
      things simpler, but what about those of us who release Open Source
      software under non-GPL licenses such as the BSD, MIT, and Artistic
      licenses?
    </p>
  </blockquote>

  <p>
    I've been an Ext user since its inception as YUI-Ext, but the fact that
    I cannot seem to get a straight answer to a simple question makes me
    wary and extremely skeptical.
  </p>
</blockquote>

<p><a href="http://ejohn.org/">John Resig</a>, the author of <a href="http://jquery.com/">jQuery</a> and <a href="http://ejohn.org/blog/processingjs/">Processing.js</a>,
responded:</p>

<blockquote class="quote">
  It's important to understand that OSS developers are not their target
  audience at all. I'm 100% certain that we'll never get a clear
  response.  They're using 'open source' as a buzzword selling point to
  lure companies in, befuddle them with confusing viral licensing, and
  obligate them (through the obvious balking that the corporate lawyers
  will do) to get them to buy a full, corporate, license. It's very
  sneaky, quite disingenuous, and paints a bad picture for open source
  development as a whole.
</blockquote>

<p>It's been over three weeks since these this exchange on Reddit. None of
my questions have been answered on the Ext license pages or in the
68-page license thread on the Ext forums.</p>

<h2>Rationale</h2>

<p>According to the <a href="http://extjs.com/company/dual.php">Ext license page</a>, Ext licensing is based on the
principle of "Quid Pro Quo", or "something for something":</p>

<blockquote class="quote">
  <p>
    Dual Licensing is based on the principle of Quid Pro Quo -
    "something for something". In return for the advantages you realize
    from using an Ext product to create your application, we require
    that you do one of the following:
  </p>

  <ul>
    <li>
      Contribute to the continued development of the product by
      purchasing commercial licenses from Ext. This option secures you
      the right to distribute your application under the license terms
      of your choice
    </li>

    <li>
      Contribute to the Open Source community by placing your
      application under an Open Source license (e.g. GPL v3). This
      option secures all users the rights to obtain the application's
      full source code, modify it, and redistribute it.
    </li>
  </ul>
</blockquote>

<p>The justification for using the GPLv3 instead of the LGPL is addressed
on the <a href="http://extjs.com/products/license-faq.php">Ext license FAQ page</a>:</p>

<blockquote class="quote">
  We considered once again releasing under straight LGPL but it was not
  an option as a business. We tried that with version 1.0 and found out
  quickly that it enabled others (e.g. large commercial entities) to
  take our work, wrap it up and sell it as their own. With no mention of
  us at all. We, as a business with a full time team of talented
  developers, can not exist under those circumstances. We would quickly
  become diluted and competing with ourselves. 
</blockquote>

<p>The concern about others taking their work and selling it without
attribution is particularly ironic, considering:</p>

<ul>
<li>Ext only exists because a large corporation (Yahoo!) decided to
share their hard work under a permissive open source license </li>
<li>Significant portions of Ext, including the Event
handling code and reset.css, were copied wholesale from YUI</li>
<li>The Ext object system comes from YUI, which is based on 
<a href="http://dean.edwards.name/weblog/2006/03/base/">Dean Edwards' JavaScript inheritance code</a></li>
<li>Many of the older Ext icons originally came from the 
<a href="http://www.famfamfam.com/lab/icons/silk/">Famfamfam Silk icon set</a></li>
</ul>

<p>What do the projects above have in common?  That's right, they are all
in the public domain or available under extremely permissive Open Source
licenses.  </p>

<p>The Ext team is certainly entitled to license and sell their software
any way they see fit.  However, it is hypocritical and dishonest to
complain about other people taking your work and selling it as their own
when you take other peoples' work and either sell it as your own or
relicense it under an extremely restrictive license.</p>

<p>It is tempting to attribute this entire fiasco to a simple
misunderstanding on the part of Jack Slocum and the Ext team.  Here's
what I had to say on Reddit:</p>

<blockquote class="quote">
  It is a bit disconcerting that Ext has such strong roots in existing
  Open Source software, and yet the project seems at best partially
  indifferent, and at worst, outright hostile to the Open Source
  community.
</blockquote>

<p>Unfortunately, according to John Resig, this isn't the first time that
there have been problems with the Ext team:</p>

<blockquote class="quote">
  <p>
    We (the jQuery project) worked hard with them to try and fix bugs
    and add features for an ExtJS integration layer. They turned around
    and built their own, specialized, library (removing the need for any
    of our work) and then mutated the licensing into this bizzaro scheme
    that they have now. We can't, in good consciousness, even recommend
    their library anymore due to its very nature. On top of this they
    ended up hiring our lead evangelist to promote their work. I can't
    speak for everyone on the team but I feel quite frustrated and used.
  </p>

  <p>
    They're providing a great disservice to the Open Source community in
    general. They consume with reckless abandon, it's impossible to even
    hope to borrow code from them, and they turn it all into a
    money-making machine. No aspect of that sits well with me.
  </p>
</blockquote>

<p>Jack Slocum did <a href="http://stephan.reposita.org/archives/2008/04/28/more-on-extjs-the-gpl-fiasco-and-open-source-community-style/">respond to this comment on a separate blog</a>.  He also
<a href="http://jackslocum.com/blog/2008/04/26/ext-js-license-change-and-personal-attacks/">wrote a post on his blog</a>.  Neither adequately addresses John
Ressig's main points or my questions from the Ext forums, so I won't
bother quoting his mostly vacuous responses here.</p>

<h2>Conclusion</h2>

<p>To recap, the reasons I recommend against using Ext are:</p>

<ul>
<li>A trend towards more restrictive licenses</li>
<li>Team is unwilling or unable to address licensing issues</li>
<li>Blatant disregard for other Open Source projects</li>
</ul>

<p>Some suggestions for the Ext team:</p>

<ul>
<li>Release Ext under the LGPLv3, BSD license, or GPLv3 with the
<a href="http://www.gnu.org/licenses/gpl-faq.html#WMS">special provision</a> </li>
<li>Provide the Ext artwork and CSS under one of the licenses above,
or one of the <a href="http://en.wikipedia.org/wiki/Creative&#95;Commons&#95;licenses">Creative Commons attribution licenses</a></li>
<li>Update the Ext license FAQ with detailed information about
which Open Source licenses are compatible with Ext, including
specific usage scenarios</li>
<li>Add a list of Open Source software which Ext has borrowed from to
the license page and to the license information included in
the download</li>
<li>Put older versions of Ext back on the download page</li>
</ul>

<p>Finally, here are a list of Ext alternatives.  None are as nice as Ext,
but they are all available under permissive licenses and they each have
an active and enthusiastic user community:</p>

<ul>
<li><a href="http://dojotoolkit.org/projects/dijit">Dojo/Dijit</a> (BSD license)</li>
<li><a href="http://echo.nextapp.com/site/echo2">Echo2</a> (MPL license)</li>
<li><a href="http://docs.jquery.com/UI">jQuery/jQuery UI</a> (BSD license)</li>
<li><a href="http://developer.yahoo.com/yui/">YUI</a> (BSD license)</li>
</ul>

<p>Comments are still broken at the moment.  I've posted this article on
<a href="http://reddit.com/">Reddit</a>, so feel free to <a href="http://reddit.com/info/6jhhs/comments/">comment there</a>.</p>