- Inefficient
Much work must be duplicated because existing implementations cannot be easily reused. Furthermore, a programmer may find a bug in a third-party library but will not be able to fix it directly without the sources. - No Quality
When the source for a program is not public, there can be no peer review, no external feedback. It means programmers tend to write a hacked temporary solution without thoughts of the code being reused in the future. - No right to evaluate
You wouldn't buy a car without giving it a test drive, so why buy some software without evaluating it first? Many many developers have had to spend 1000's on some third-party software, only to find out it's poorly written or unsuitable. - No interoperability
Getting one program to work with another is hard when you've no idea what the protocols or formats each uses are. This encourages monopolies and discourages innovation and overall of course makes software much less useful than it should be.
Now "free" software (I use "free" rather than free to indicate liberty, not price) has taken two approaches to solving this: BSD and GPL. BSD more or less gives full freedom of use and reuse, so long as a statement of use is made somewhere. GPL goes further and has a viral-like quality which does not permit use of the GPLed code unless all other code is also GPLed.
Now I'm fine with "free" software. I think its ideology is honourable, the concept pure and most importantly it's been a massive counterbalance to the existing regime. However, I also have grave concerns about its sustainability:
- "Free" software inhibits blue-sky innovation
Money can only be made from mature software, whatever the field. Proprietary vendors use the profits from existing sales to finance the development of new software. They get the workers obviously enough by paying them.
However, new "free" software can only be created two ways: by enough volunteers or by a suitable bespoke contract (eg; government grant). With the first, there is a major problem because psychologically most people won't donate their time on whacky unproven ideas. With the second, there is always a strong bias in favour of achieving a fixed & limited goal, so the possibilities for true radical innovation are low.
Proprietary vendors aren't much better for radical innovation in practice, but over the course of twenty years it becomes important. Their small allocation to really radical invention (via very blue-sky R&D) is a bet on striking lucky against finding a niche in industry standards and it proves beneficial in the long run. Also, when a company is on the rocks, it can invest in very blue-sky projects as a means of saving itself and I can see no equivalent in "free" software.
- "Free" software does not encourage entrepreneurism
Western capitalism and indeed much of its culture and society depends on an innovation-based culture. If you want innovation to be generated, you must decrease the risks and increase the rewards for success as much as possible.
Now Richard Stallman would disagree that the carrot and stick approach is best here, but I would and the majority would too I think. The problem is "free" software does not generate a lot of profit so the carrot is much smaller. It is made further smaller again by the way anyone can take a copy of your work and derive their own competing copy, although they must make it under the GPL.
These are not short-term concerns. The success "free" software has had against proprietary is amazing, but I think mostly only because proprietary is so bad for everyone except the CEO's of certain US multinationals. If an improved form of proprietary software were adopted, you could get most of the benefits of "free" software without its accompanying disadvantages. Most importantly, such a scheme must be self-sustainable in the long term.
Now among my critics, many will argue "free" software does innovate widely. They would of course be quite correct, but I was speaking of radical innovation ie; complete redesigns and rewrites from the ground-up. To my knowledge, there is no successful ground-up redesign and rewrite in the "free" software world that was not subsidised by a third party (eg; ReiserFS by DARPA). Furthermore, all non-subsidised radically innovative "free" software projects such as GNU Hurd have limped along because they can't attract enough programmers, and this is a detriment to not only "free" software but software in general as without competition, proprietary software has no reason to innovate either.
So what's the alternative?
The alternative is to make software a form of IP implementation, not IP design. The reason why most software is licensed and not sold is because some decades ago US software corporations decided it'd be a good idea if their software were IP design and thus more controllable. This was possible because unlike any other form of IP, software is both the design and the implementation, and rather go down the "it's implementation" route they chose the design.
It gets worse: since 1980 the US legal system has permitted the patenting of software. This is an incredibly stupid move which is terrible for software. Software patents are one of the single most evil things to happen to software and I cannot stress how much they need to be repealed.
However "free" software has no answer for this other than to say "software patents prevent 'free' software". Let me be clear: politicians don't give a damn about "free" software except for what supporting it can gain them. Given "free" software can't make campaign donations, it's already missing a large chunk of what US software corporations can offer.
If we were to change software into IP implementation instead, what would the consequences be:
- Software binaries are the same as software source
Is there really much difference between people giving illegal copies of your program's source to each other rather than the binaries? Of course you say, then people could modify your product and sell a better one. Well exactly! - if your product isn't up to par, then everyone should have the right to improve it so long as they pay you an appropriate royalty
A further consequence is that if you sell a binary, it must come with optional source. You wouldn't buy a car whose engine you couldn't tinker with, so why with software? - Royalties are paid for the implementation, not the theory
And this is exactly how it should be. If you write 10,000 lines of code and someone reuses 2,000 lines of it, you should get a royalty from the full project. The software patent concept of having someone pay a royalty for using a certain compression algorithm in the creation of their software is dangerous because (a) algorithms are nothing without an implementation and (b) it dissuades others from improving the algorithm.
Contrast with a patented pump. I can buy a certain pump off the patent holder or licensee but during my work with it I realise I can improve the design (which I could then patent without usually paying royalties for the original design). The pump itself is like software, not the design for a pump.
Also, there are some other peculiarities of software eg; its extremely short life-cycle. In any other form of engineering, a twenty year patent is usually sufficient because improvements work at that speed. Software can be completely rewritten in only ten years and a major failing of traditional proprietary software is that it does not encourage study.
Because of both these reasons, I suggest a five year fixed limit on copyright ie; five years after public release, all source reverts to the public domain where it can be reused and indeed relicensed. This single feature would do a great deal to encourage innovation, reduce monopolies and fix the interoperability problem.
The "Fair Use" Software Licence
(WARNING: This has not been checked by a legal expert, so have it checked by one before using for your own software).
Explanatory comments are in italics.
This software was released to the public on <insert date of release
here>.
The price of this software on that date is <insert price here>. The
supplement payable for full sources of this software is <insert supplemental
price here>.
The contact for royalties, reuse and sales enquires is:
<insert name and address here, along with telephone and email address>
- This License applies to any piece of computer software (the "work")
which contains a notice placed by the copyright holder saying it may be
distributed under the terms of this "Fair Use" License. The "Program"
refers to any such piece of software and a "work based on the Program"
means either the Program itself or any derivative work under copyright
law: that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications. It also includes any translations
of the Program into another programming language and for the rest of this
licence translation is included without limitation in the term
"modification".
- This Licence refers to copying, distribution and modification of the
Program and nothing else. It does not cover the execution of the Program
nor the output of Program except where the output's contents constitute a
work based on the Program.
You optionally may offer a warranty with or without an extra price supplement, or take the financial responsibility for incorrect operation of the software.
- You are guaranteed the right to receive a full working copy of the
Program's source code with any purchase from its supplier for a supplement
to its original cost not exceeding 25% of the Program's original cost.
Where the binary version of the Program is distributed for free, the
charge for the source code may not exceed 50 euro. The ability to purchase
the sources post-purchase of a binary must exist for a minimum of five
years after its initial public release.
- You are guaranteed the right to modify your copy or copies of the
Program or any portion of it, thus forming a work based on the Program,
and copy and distribute such modifications or work under the terms of this
licence provided that you pay an appropriate royalty per copy distributed
which is to be negotiated with the copyright holder of the work (see
below).
- You are totally responsible for the collection and payment of
royalties payable as the result of the derivation from the Program ie;
those who purchase or modify your derived work must directly pay you or
your agent and you or your agent in turn must pay those from whose code
you derived your work according to the previously agreed royalty rate.
- In any redistribution of the Program's source, you must conspicuously
and appropriately publish on each copy an appropriate copyright notice and
disclaimer of warranty; keep intact all the notices that refer to this
License and to the absence of any warranty; and give any other recipients
of the Program a copy of this License along with the Program.
- When distributing modified copies of the Program, you must cause:
- The modified files to carry prominent notices stating that you changed the files and the date of any change.
- Any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole to all third parties under the terms of this same License.
This replicates the "viral" nature of the GPL and the power it gives is used below.
These requirements apply to the modified work as a whole. If there are clearly identifiable sections of that work which are not derived from the Program, then those sections can be distributed separately without involving this licence. However when such sections are distributed with the overall work derived from the Program, this Licence must be applied to the whole of the distribution equally irrespective of who wrote it or copyright licence. - THIS SOFTWARE IS PROVIDED "AS IS"' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR NEGLIGENCE
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
- This licence applies to the Program and works based on the Program. It
does not affect other works placed on the same storage or distribution
medium as the Program.
- The price for this software is that "per simultaneous user" ie; if one
user wishes to use the software on three different computers irrespective
of configuration then they may do so. If there are two simultaneous users
of the software on the same three computers, then two payments are
required.
This is to balance between home use, company use and bespoke use. Whilst most benefiting residential users with no per-computer fee (see below for more residential use exceptions), it catches companies in the traditional manner.
"Irrespective of configuration" means irrespective of processor, chipset or operating system where there is an implementation of the software capable of running on that configuration. It is intended that the price is to include all binaries capable of running on all supported configurations within the same price.
This is because soon and for the future most new software will be developed using portable libraries and thus porting will become changing a compiler switch. It is to prevent users being exploited for using more than one type of computer or operating system or indeed more than one virtual machine running different operating systems on the same computer.
Where there is significant extra work required in altering the Program for use on a different operating system, the vendor may charge up to an additional 25% over the cost of an existing implementation for that release only. However, in the next major version release, all implementations shall be provided together for the same price.
If the vendor intends to discontinue support for an implementation for a certain configuration, notice must be given publicly at least one major revision release previously.
To prevent releasing a port for the 25% premium every product cycle.
- All software under this licence shall revert to the public domain
after a period of five (5) years after its date of public release which
has been listed above.
To vastly encourage reuse, study, interoperability and discourage monopolies and closed standards.
- The royalty per distributed copy paid for the reuse of some or all of
the Program shall not exceed 90% of the price of the original Program as
listed above (or the price of the sources if the original Program was
free). This licence's main intent is to encourage code reuse, and as such
there is a distinction made between is-A and has-A reuse of the Program
(is-A and has-A are OO terms).
Is-A reuse is where most of the purpose of the original Program is present in the modified Program eg; a new library extending an existing library or say a CAD program with extra features. In this case, royalty per distributed copy = (price of original Program as listed above, or the source price if binary was free) * (% of real source[1] reused against total real source in the original).
Has-A reuse is where part of the original Program is used as an internal library by the modified Program eg; a routine to perform a FFT or a PNG library internally used to process PNG's for some wider purpose. In this case, royalty per distributed copy = (sale price after sales taxes) * 50% * (% of real source[1] reused against total real source in project). Where the project is made up of mixed programming languages, weighting for languages will have to be employed.
[1]: Real source reused = the source code less comments, blank lines, text, numbers, variable names, code names, non-human generated and repeated fragments of code. White space and carriages returns insofar as their minimal human-written and language-necessary usage remain.
It is intended that while an automated scanner can help with the calculation of real source reused, negotiation will always form the finally agreed figure, especially regarding the weighting per language
It's clearly biased for Has-A reuse and indeed this is the single point where it becomes incompatible with the GPL (which prevents reuse of its software outside itself).
- You may distribute a has-A modified copy of the Program without paying
any royalties mandated by this licence if you do not charge for it. It is
recommended everyone sets a price for the software even if you intend to
primarily distribute it for no charge as then reuse of your free code in
other projects which do charge will have the appropriate royalties paid
where they're due: to the creator of the software. For the truly
altruistic, they can go to charity or a worthy cause.
You can always set a price and then give it away for free. This might not make sense, but you can equally do this in any other marketplace eg; free gifts with another purchase. This is intended to promote bug fixing, study, passing to friends, extra features, entrepreneurism and the ability for software of little reuse value alone to become reusable through the inclusion in a free library.
The has-A limitation is purely to prevent someone undermining software by a competitor redistributing it for free, but not prevent inclusion of competitive technology.
- You may distribute delta changes (ie; patches, diffs) which when
applied to the source of the Program produce an is-A modified copy of the
Program without paying a royalty. This is not applicable if the delta
changes contain any non-functionally modified code.
To permit users to bug-fix software they have bought and distribute the fixes to other users without royalty. The last sentence ensures you cannot include the entire source with say an extra tab in it in order to abuse this clause.
- All documentation accompanying the Program may be freely copied
verbatim without change without fee.
I hate when documentation isn't publicly available. It should be, to aid evaluation.
- If a royalty cannot be agreed upon between two parties, third-party
arbitration at a suitable arbitration facility will result (note, this
isn't legally enforced but it should be). If a request for setting
royalties is not answered within one month after repeated attempts by all
methods available (keep evidence of the attempts in case of contest), the
rights conferred in the rest of licence are still valid and one may
progress with the derivative work - however, at a later stage, the
copyright holder may request royalties to be set whereupon the normal
provisions of this licence apply. There is nothing any copyright holder
can do to prevent distribution under the terms of this licence but they
always have the right to be paid the royalties specified under this
licence. Since this licence is voluntary, it is expected no dirty tricks
like stalling tactics will be used.
To achieve the aims of this licence, to protect both rights owner and customer. Some legal support would be wonderful for this as I'm not entirely sure it's legally binding.
- Software patents are one of the worst things possible for computer
software - however if a company must patent software for defensive
purposes, then this permitted and indeed encouraged.
Under no circumstances shall a licensee prosecute software patent infringement against a company or person which is not nor ever has sued the user for software patent infringement. Doing so revokes the licence for use of any software under this licence for that licensee.
Furthermore under no circumstances shall a licensee seek royalties for held software patents off anyone except others requiring royalties off the licensee for software patents.
Basically an ethical condition to discourage the aggressive use of software patents. Under this, a company can change its ways and stop aggressively using software patents and thus be able to use the licensed software.
- Under no circumstances shall a user of this licence knowingly cause
the prosecution of private individuals for failure to pay royalties nor
negotiated a royalty contract resulting from private distribution among
personally known friends and colleagues on computers residing in
private residences. Doing so revokes the licence for use of any software
under this licence for that licensee. An employer remains liable for
royalties caused by use of this software on their work machines.
I don't agree with the persecution of private individuals for copyright infraction and I furthermore think that in fact private personal distribution actually helps software sales eg; Doom.
Some notes:
- The aim of this licence is for copyright holders of software to voluntarily adopt what is best for the industry. Since adoption is voluntary, I expect people not to abuse it eg; someone not permitting someone else to reuse their code for any royalty. Hence I have left the section on arbitration without detail.
- If the copyright holder issues this licence with a 100,000,000 price but distributes both source and binaries for free, then effectively this licence becomes the GPL with an effective but not absolute ban of reuse in commercial code. If the copyright holder issues this licence with a 0 price then effectively this licence becomes a viral BSD licence.
- This licence is designed to maximise the reuse of software and furthermore to make software packages more competitive. Now someone writing a new superior protocol or even a perfect library implementing the same protocol as some other library can win or lose depending on its quality, price and suitability.
- The idea is to create a knowledge-based entrepreneurial environment for software where different skilled practitioners compete to produce the most technically perfect piece of reusable software.
- Many computer software engineers will recoil in horror at the thought of the regime outlined above. However, I ask you, is it not worse to work everyday in some company who makes a profit of two euro for every euro they pay you? Wide adoption of this licence will decentralise software production, so teams up to one hundred will become the maximum and software companies worldwide will much more resemble the European norm.
- A failing of the GPL is addressed, in that all GPL code is effectively unreusable by commercial entities. This I think wrong - this licence permits free software to reuse for free, and if a commercial entity then reuses the free software royalties return. This opens the previously closed possibility of combined commercial and free software becoming commercial again.
- Innovation will be greatly increased, as will cooperation on mutually beneficial interoperability standards. A company could even integrate the entire of a competitors solution within their own. Or a company could produce an overly-large GUI-based application and someone else could extract the core code making up perhaps 5% of the total to produce a rival solution, perhaps with improved GUI or none at all (command-line only) with a price discount!
- This is a major goal - to have more customisable software out there, and thus to vastly increase customer choice. Since user interface code is usually very expansive and dwarfs the rest of the program, there will be a tendency to reduce code spent on user interfaces and thus improve user interface handling techniques.
- Because of the viral nature of the licence, the original creator of the software can inspect redistributed versions of their code for bug fixes and new features, and reimplement them in their own product. I think this fair.
- It is assumed that royalty management service companies will spring up as so to remove the need to individually handle processing of royalties. This will be somewhat similar to similar services for book or CD publishers except tailored for the individual programmers a la IT contractor financial services.
- The biggest problem I and I'm sure others will foresee is the calculation of real source values. I have done some experiments and I believe anything compiled can be computed reasonably accurately and with difficulty of cooking the results (basically you analyse the assembler output of the compiler, not the source itself). However interpreted languages remain much harder though I feel not technically impossible.