The Limiting Factor

- semi-structured line noise.

SAS vs. World Programming – Opinion of the Advocate General

| Comments

So the Advocate General to the ECJ has submitted its opinion to the Court on the questions submitted by the High Court of Justice of England and Wales in the SAS vs World Programming case that i wrote about here and here.

The Advocate concludes the following:


Article 1(2) of Council Directive 91/250/EEC of 14 May 1991 on the legal protection of computer programs is to be interpreted as meaning that the functionalities of a computer program and the programming language are not eligible, as such, for copyright protection. It will be for the national court to examine whether, in reproducing these functionalities in its computer program, the author of the program has reproduced a substantial part of the elements of the first program which are the expression of the author’s own intellectual creation.


Articles 1(2) and 6 of Directive 91/250 are to be interpreted as meaning that it is not regarded as an act subject to authorisation for a licensee to reproduce a code or to translate the form of the code of a data file format so as to be able to write, in his own computer program, a source code which reads and writes that file format, provided that that act is absolutely indispensable for the purposes of obtaining the information necessary to achieve interoperability between the elements of different programs. That act must not have the effect of enabling the licensee to recopy the code of the computer program in his own program, a question which will be for the national court to determine.


Article 5(3) of Directive 91/250, read in conjunction with Articles 4(a) and (b) and 5(1) thereof, is to be interpreted as meaning that the expression ‘any of the acts of loading, displaying, running, transmitting or storing the computer program [which the person having the right] is entitled to do’ relates to the acts for which that person has obtained authorisation from the rightholder and to the acts of loading and running necessary in order to use the computer program in accordance with its intended purpose. Acts of observing, studying or testing the functioning of a computer program which are performed in accordance with that provision must not have the effect of enabling the person having a right to use a copy of the program to access information which is protected by copyright, such as the source code or the object code.


Article 2(a) of Directive 2001/29/EC of the European Parliament and of the Council of 22 May 2001 on the harmonisation of certain aspects of copyright and related rights in the information society is to be interpreted as meaning that the reproduction, in a computer program or a user manual, of certain elements described in the manual for another computer program may constitute an infringement of the copyright in the latter manual if – a question which will be for the national court to determine – the elements reproduced in this way are the expression of their author’s own intellectual creation.

The opinion is pretty much a slam dunk for World Programming. The only hiccup is the issue related to the copying of parts of SAS’ manuals, but that is a minor issue compared to a situation where World Programming would have been restricted in their ability to produce a product compatible with SAS’ product. Now we just have to hope that the Court agrees with the Advocate General.

Oracle Java 7 and ‘Commercial Features’

| Comments

Oracle has just announced the general availability of Java 7 SE including Java SE Advanced and Java SE Suite.

Being a software license nerd I of course skimmed the Java SE License Agreement (full title “Oracle Binary Code License Agreement for the Java SE Platform Products”).

The license contains some interesting wording regarding “Commercial Features” in section 1, 2 and SUPPLEMENTAL LICENSE TERMS section A and G. The “Commercial Features” are defined in this document (PDF version with better layout here). Please note that the specification of “Commercial Features” is not part of the license as such and therefor subject to change at Oracle’s discretion.


It turns out the “Commercial Features” are subject to rather draconian restrictions (SUPPLEMENTAL LICENSE TERMS section A):

COMMERCIAL FEATURES You may not use the Commercial Features for running Programs, Java applets or applications in your internal business operations or for any commercial or production  purpose, or for any purpose other than as set forth in Sections B, C, D and E of these Supplemental Terms.  If You want to use the Commercial Features for any purpose other than as permitted in this Agreement, You must obtain a separate license from Oracle.

As you can tell any meaningful business use of the “Commercial Features” are subject to a separate license.

So does the regular Java 7 SE download contain any of these “Commercial Features”? It does not look like it and the Java Se Advance and Java SE Suite packages doesn’t either, because they do not exist. From below two sections that appear at end of this document, it is clear that the Java SE Advanced and Java SE Suite “products” are a combination of the Java 7 SE and a number of separate packages.

Installation of Java SE Product Editions

Oracle does not provide installation programs that correspond directly to Java SE, Oracle Java SE Advanced and Oracle Java SE Suite. Depending on the features licensed, one or more of the following individual packages must be downloaded:


JRockit JDK

JRockit Mission Control

Java for Business JRE

Java for Business JDK

Licensing Considerations and Restricted-Use Licensing

Some of the packages described in Installation of Java SE Product Editions install commercial features that are restricted to Oracle Java SE Advanced or Oracle Java SE Suite. For example, the JRockit JDK comes with a deterministic garbage collector that requires a Oracle Java SE Suite license.

If you download (which you can do for instance here and here) and use these extra packages for the purposes outlined above (any meaning full business use) in combination with Java 7 SE you are subject to a separate (ostensibly payable) license.

The only mention I can find of this change from Oracle is this blog post with the clearly misleading title “JRockit is Now Free (and Other Java License Updates)”, as this does not apply to the JRockit “Commercial Features” listed above.

You should make sure that your developers, ops people and relevant vendors of such service knows this, or you could end up breaching your license and owing Oracle a lot of money.

Dropbox Unzip

| Comments

Inspirer by this post where the author shows how to add automatic unzipping to a Dropbox folder on OS X, I wanted to see if something similar was easily achievable on Ubuntu (10.10).

After a bit of searching I found incron. Quoting from the website incron “is an “inotify cron” system. It consists of a daemon and a table manipulator. You can use it a similar way as the regular cron. The difference is that the inotify cron handles filesystem events rather than time periods.”

To create a folder in your Dropbox that automatically unzips any zip file dropped into it first install incron. It is available in the Ubuntu Universe repository and can be installed using:

sudo apt-get install incron

After the package is installed you must add the username of all users who should be permitted to add jobs to incron to /etc/incron.allow like this(replace [username] with your username):

sudo echo “[username]” >> /etc/incron.allow

Next create the unzip folder in your Dropbox folder:

mkdir [path to your Dropbox folder]/unzip

Next we need to add the actual unzip job row to incron like this:

icrontab -e

This opens the user incron table in the deafult editor. Insert the following line, replacing [path to your Dropbox folder] with the absolute path (don’t use ~) to your Dropbox folder:

[path to your Dropbox folder]/unzip IN_CLOSE_WRITE unzip $@/$# -d $@

Check that the job row was added to your incron table:

incrontab -l

This should output the line you just added above. If this works try copying a zip file into the Dropbox/unzip folder. If everything works it should unzip automatically. This obviously only so long the machine you installed the incron job is online.

A Simple Chat App Using Aleph, Websockets and Clojure

| Comments

I have implemented a small example shoving how to use the websocket support in Aleph, asynchronous webframework for Clojure built on Netty.

The example is tested with Chrome and Firefox on Ubuntu. It should work in all modern browsers as it relies on web-socket-js for websocket emulation in browsers that do not have native support. Please note the updated Usage instructions. The socket-policy-server necessary for Flash websocket emulation has to listen on port 843 (at least that is the first place Flash asks for the policy file) so the server has to be run using sudo.

If you are interested the example is at hosted on github, along with usage instructions.

Oracle vs Google - Implementing the JVM Specification

| Comments

A lot has already been written on the Oracle vs. Google Android case. Some of it is brilliant. Some is illuminating, some less so. Since the complaint is devoid of any details as to how Android infringes upon the patents listed in the complaint, I will focus on the alleged copyright infringement. Here too Oracle is not specific but it is clear that the infringement is alleged at least in part on the basis of unlicensed use of specification(s) in which Oracle holds copyright(cf. Count VIII section 38 of the complaint) .

For context Oracle in the complaint defines Android as:

The Android operating-system software “stack” consists of Java applications running on a Java-based object-oriented application framework, and core libraries running on a “Dalvik” virtual machine (VM) that features just-in-time (JIT) compilation.

One aspect that appears to confuse matters is what Dalvik is. Dalvik is VM but not a Java VM. Dalvik executes .dex files which are created from .class files produced by a Java compiler. The .dex files are created by a tool called “dx”. As such Dalvik does not implement the Java Language Specification. The “dx” tool does however appear to implement part of the Java Virtual Machine Specification, namely the part that specifies the .class file format. As the “dx” tool does not comply with the conditions of SUN’s license grant the question is then: Does Google need a copyright license from SUN to implement the “dx” tool?

From a European perspective the recent SAS vs. World Programming(WPL) case sheds some very interesting light on this issue. The case a addresses the application of copyright to programming languages, interfaces and functionality. While the judge submits all of the questions to the ECJ for a preliminary ruling, he clearly thinks, on the strength English precedents(specifically the Navitaire case) that neither programming languages, interfaces or functionality is protectable by copyright. If the ECJ concurs with the judges opinion it is hard to see why Google would need a license to implement the .class file format as part of their “dx” tool.

Would the analysis under US copyright law be the same?

SAS vs World Programming - SAS’ Vesion

| Comments

SAS issued a press release today with its take on the recent decision in the case between the two companies.

While WPL’s press release might have been s optimistic in its evaluation of the decision, SAS’ press release is a master piece of hypocrisy and highly tendentious. The headline:

“Court finds World Programming Ltd. Infringed on SAS Copyrights; refers case to European Court of Justice”

Technically this is wrong. The judge referred a number of key questions to the ECJ – not the case it self. More specifically the judge asked for a preliminary ruling on 6 questions (para 332 i, ii, iii, v, vi and viii):

“i) Although I am not persuaded that Pumfrey J was wrong to conclude in Navitaire that, on the true interpretation of Article 1(2) of the Software Directive, copyright in computer programs does not protect programming languages from being copied, I agree with him that this is a question on which guidance from the ECJ is required (see paragraphs 211-218 above).

ii) Although I am not persuaded that Pumfrey J was wrong to conclude in Navitaire that, on the true interpretation of Article 1(2) of the Software Directive, copyright in computer programs does not protect interfaces from being copied where this can be achieved without decompiling the object code, I consider this is also a question on which guidance from the ECJ is required (see paragraphs 219-227 above).

iii) Although I am not persuaded that Pumfrey J was wrong to conclude in Navitaire that, on the true interpretation of Article 1(2) of the Software Directive, copyright in computer programs does not protect the functions of the programs from being copied, and although his decision on that point was upheld by the Court of Appeal in Nova, I consider that this is also a question on which guidance from the ECJ is required (see paragraphs 228-238 above).

v) I consider that the reasoning which supports Pumfrey J’s interpretation of Article 1(2) of the Software Directive also applies to Article 2(a) of the Information Society Directive, but again this is a question on which guidance from the ECJ is required (see paragraphs 251-256 above).

vi) On the assumption that Article 2(a) of the Information Society Directive is to be interpreted in the same manner as Article 1(2) of the Software Directive, WPL has not infringed SAS Institute’s copyright in the SAS Manuals by producing or testing WPS (see paragraphs 257-267 above).”

SAS completely neglects to mention that the judge is clearly prepared to find in favor of WPL in all these questions and cites English precedents in support of such a decision. He asks for the ECJs confirmation of his interpretation because the basis for the rules in English law is EU Directives (see here for the practice directions the court operates under).

SAS goes on to state the following:

“The court also found that WPL acted outside the scope of its license agreement for SAS Learning Edition software by using that product to develop WPL’s World Programming System (WPS) software.”

What the judge actually said was this (my emphasis):

vii) WPL’s use of the SAS Learning Edition falls outside the scope of the terms of the relevant licences (see paragraphs 276-290 above).

viii) The interpretation of Article 5(3) of the Software Directive is another question on which guidance from the ECJ is required (see paragraphs 291-311 and 314 above).

ix) On the interpretation of Article 5(3) which I favour, WPL’s use of the Learning Edition is within Article 5(3), and to the extent that the licence terms prevent this they are null and void, with the result that none of WPL’s acts complained of was a breach of contract or an infringement of copyright except perhaps one (see paragraphs 313-315 above).

Also on this issue SAS chooses not to disclose that the judge is prepared to find in favor of WPL.

Accusing WPL of spinning the courts decision and then applying tornado class spin to the decision yourself is just pathetic.

Clojure, Jetty 7 and WebSockets

| Comments

I found this gist by Chris McDevitt which is a simple chat server and browser client that uses Jetty 7, Clojure and WebSockets.

I turned out to be quite a hassle to get it running so I thought I would document it here so others might save some time.

I have create a project on github that includes all the dependencies. I run it in Emacs using swank-clojure-project. The two last forms start the two servers – one is the websocket chat server, the other just serves the index.html file (this is necessary for the web_socket.js  to work). I have only been able to make this work in browsers with native websocket support (Chrome and Safari). If anybody can figure out what goes wrong in the other browsers (e.g. Firefox) let me know, and I will update.

SAS vs. World Programming

| Comments

UPDATE: I did a follow-up post on the SAS Press Release here

So the decision in “SAS Institute Inc v World Programming Ltd” has been published and it is in favor of WPL on all counts, except that the judge finds that WPL – against it’s own policy – copied certain language from SAS’ manuals into its own manuals.

Key questions pertaining to almost all the other claims will be submitted to the ECJ for confirmation of the judges interpretation of the law(specifically Articles 1(2) and 5(3) of the Software Directive and Article 2(a) of the Information Society Directive) (see below).

If everything holds up this is potentially a huge win for competition in the software industry.The decision means that can re-implement the functionality of other software and reference that software and its documentation in the process, as long as you do not copy any source code or documentation. The judge (who appears to be quite technically savvy) analyses in detail how the SAS language is constructed. SAS appears to argue that the PROCS steps in the SAS Language is not a programming language, but in fact a computer program in itself. The SAS expert Dr. Ivey states the following on the matter:

> the SAS Language was a domain specific computer language with many of the attributes of a command language, rather than a programming language

It is not clear to me exactly what SAS was hoping to achieve with this line of reasoning (perhaps they were trying to escape a suspected non-copyrightability of programming languages) but whatever it was it did not work as the judge slightly sarcastically finds that:

> In my judgment the SAS Language is a programming language. I am comforted by the fact that this assessment coincides not only with SAS Institute’s own assessment in paragraph 6 of its Particulars of Claim and in its literature, but also with that of the anonymous author of the entry for “SAS language” in Wikipedia (as last modified on 25 April 2010), which states: > > “… SAS can be considered a general programming language, though it serves largely as a database programming language and a language with a wide variety of specialized analytic and graphic procedures.”

The judge also analyses whether the functionality of a computer program (not the source code) is itself protectable by copyright and finds that:

> Accordingly, I consider that the functionality of a computer program falls on the wrong side of the line drawn by Article 1(2) of the Software Directive, Article 9(2) of TRIPS and Article 2 of the WIPO Copyright Treaty.

So the functionality of a computer program is not protectable, which is not too surprising, but as the question in the judges opinion is not _acte clair_ it is submitted together with 5 other questions (para 332 i, ii, iii, v, vi and viii)) to the ECJ for guidance. Among these is also the question of whether a programming language as such is protectable by copyright. The judge finds that this is probably not the case, but appears less certain on this question than the others.

It will be really interesting to see if this will result alternative vendors deciding to challenge other dominant software products, by producing compatible solutions that release the customers from lock-in and introduce effective competition.

Open Source and Export Control

| Comments

Ref my comments on export control rules in my previous post, it looks like these are now impacting open source in a major way. Apparently SourceForge in an effort to comply with US export control rules (specifically countries covered by sanctions administrated by OFAC) have blocked all users from Cuba, Iran, North Korea, Sudan, and Syria. NotePad++ appears to be the first project to withdraw from SourceForge in protest.

UPDATE: Apparently SourceForge has now made the blocking of users from sanctioned countries optional. This leaves the assessment of whether or not a project is subject to the rules up to the project owner. As export control is quite an esoteric topic some links to guidance on the applicability of US export control rules would probably have been a good idea, but SourceForge’s consel has probably counseled against that for liability reasons.

An Acceptable EULA?

| Comments

Is there such a thing? Until today I did not think so, but after having watched Mixergy’s interview with Balsamiq’s Giacomo “Peldi” Guilizzoni, I was optimistic that I might have finally found one. Check Balsamiq’s EULA out here. Peldi mentions in the interview that a helpful customer in-house counsel gave him some great feedback that helped improve the license. To whatever she told him, I would add the following:


Don’t use “represents and warrants” use only “represents”. The form is needless legalese and part of the reason why people hate lawyers. If you don’t agree read this – then go change it.


“Authorized Users” and “Authorized User” – makes no sense that the plural form would have a completely different meaning than the singular. “Authorized Users” is never used in the EULA. This might make sense when read together with the Quote/Receipt/Invoice but I doubt it. The definitions of “Authorized Machine” and “Authorized Server Node” do not appear to deal well with virtual environments.

Section 3 Grant of License

The license granted is “irrevocable” but at he same time terminable by Balsamiq as per section 12. This appears inconsistent. “(except pursuant to Clause 12 below)” should be added after “irrevocable”.

Section 4 No Warranty

Excluding all warranties does not strike me as compatible Balsamiqs mission to produce high quality software. You can’t claim to aim for excellence in everything you do, and the refuse to back it up – that’s simply not credible. On the other hand warranties provided for goods are not appropriate for software, as these are calibrated for defects that occur in individual instances (copies) of the product. I would suggest a warranty that better correspond to the apparently fanatical customer service Balsamiq provides. This does no mean warranting to fix bugs within a certain timeframe, but it does mean warranting a meaningful response to reported bugs etc. If you are doing it already it such a warranty is essential free, if you make sure that the customers remedies if you fail are manageable. If such remedies for instance only apply to the (first) reporter of the bug, you contain the effect of the warranty from spreading to all customers.

Section 6.1 Software Maintenance – For Plug-in Versions

Excellent to see inclusion of a reasonable price-escalation clause for Software Maintenance. This is something that I have had to negotiate many times and which any prudent licensee should always remember. You don’t want to be treated like SAP’s customers, do you?

Section 9 Investigation of Unauthorized Use and Distribution

This is a very pragmatic alternative to audit rights which especially a company the size of Balsamiq would have very little use for. The fairness of allocating the cost of producing the certificate to the licensee should be considered, since this might exceed the license fee by a factor of many in some cases. I would consider some kind of compensation (free maintenance?) to the customer if a request for a certificate is made and this is provided, as this is would indicate that Balsamiqs suspicion was not well-founded.

Section 10 (a) Licensee’s Restrictions

Very common provision which is also very unenforceable in the EU if the motif for the reverse engineering is a desire to “achieve the interoperability of an independently created computer program with other programs” (thanks to art. 5 and 6 of this EU directive).

Section 10 (b) Licensee’s Restrictions

Appears superfluous. How would the customer ever unilaterally be able to vary the “Authorized Use”? That said there might be a technicality in California law that makes it prudent to include this.

Section 10 (d) and (e) Licensee’s Restrictions

WTF! I can’t refer to Balsamiq’s name or do anything that has a “material and adverse effect on Balsamiq’s” interests. I am glad that I did not license Balsamiq’s software before writing this post. How can you promote Balsamiq as an open organisation in continuous dialog with its customers, and then muffle the same audience with your EULA?

Section 12 – Termination

The destruction of all copies of the software is a practical impossibility in many enterprise environments due to the back-up strategies employed. Since this will only become a requirement in case of a breach it might be justified nonetheless, but a more balanced alternative might be to require the destruction of all “readily usable copies” of the software or similar.

Section 13 – Infringement Indemnification

For the software in question and taking into account the size of the vendor (Balsamiq) this is a very reasonable clause, and it is a wise move to include indemnification if you want to have any hope selling your software to enterprise customers.

Section 14 – Limitation of Liability

Good to see that the indemnification obligations are exempted from the limitation of liability.

Section 16 – Open Source Code

For Balsamiq’s present product I wouldn’t worry much about the “viral” nature of the GPL and other similar licenses, which is clearly what this section is meant to address, but the section clearly does no harm either. If the software was meant for combination with the customer’s code or other software and subsequent distribution, I would be more interested in the list of of open source products/licenses in Exhibit A as this would enable me to assess any challenges related hereto.

Section 17 – Publicity Rights

This section solves a very common problem in a fairly practical way (the customer can opt out of Balsamiqs right to use the customer for publicity purpose prior to or any time after purchase) but a better more honest and straight forward solution, would be to permit the customer to opt out via the web form used to purchase the product.

Section 24 – Notices

While not critical why appear unreasonable by biasing this section in Balsamiqs favour? On Export Control (especially US) you really want to provide the relevant export control classification codes if you expect any one to comply with the rules. In general you want to try to avoid having your software subject to US export control rules as these are absolutely not trivial.

On balance Balsamiq’s EULA is above average but still suffers from a few weakness as outlined above. Most of these can be fixed without exposing Balsamiq to any liability that is unmanageable.

DISCLAIMER: Above is not legal advice bla, bla, bla.