Laws with software bugs

I am just wondering, what kind of software laws protect people against bugs in software. For example, the software you use may corrupt a whole project file which did not back up properly, resulting in you having to start a massive project over and you discouraged from using that particular software program and you switch to something else. Are there laws which protect the consumer from not getting refunded for this, even after years of having the software and it working properly?

Can these laws vary on how major the bug is and to which extent the bug will be considered enough for the software not being fit for purpose?


This is the reason that software developers place limited warranties and usage agreements in their software that are agreed to by users before the software can be used.

Good point. I have not YET thought about implementing my own software agreement. Though, I have not yet released it to the public.


In the US, saying that something is being provided “AS IS” is generally enough. However, this is the legal information I provided with Data-On-Demand ListBox:

You now may legally embed code to erase a harddrive, welcome to the agreement world.
In EU this is 90% impossible as the laws are above the agreement. And there are many software laws that the US doesn’t even has.
It depends on where you from and who (around the world) may download your software.

There is no way that an agreement can be above the law. It’s best to have a attorney or some legal knowledge company have it made for you. In the netherlands i see a lot of agreements (in software) wich bind to EU laws wich protect the end user and protect the developer.

This is a piece of EU change that may be good as an example: (source:

As you see such statements in a EULA in the EU would be of no value.

Regardless of what your EULA says or does not say… If there is a bug that causes damage to an end users data, computer, business etc and that bug was of a nature that is should have been detected and remediated by “a reasonable amount of quality control”, the courts may still find you liable. If the “bug” is determined to be malicious, then no EULA in the world will protect you.

An interesting question, I think it depends a lot on who your customers are. These days most of the software projects I work on are for European financial institutions. And they work on the assumption that your software will fail and that it will stop them working! And so a big part of the contract is devoted to what you will do when this happens and not if it happens.

There is lots of stuff on what exactly is a bug, the classification of bugs, the resources you will deploy to fix it, the access to their systems and information you will get. How soon you will deliver a work around or hot fix and so on.

I’ve never seen them get concerned about the fact that there was a bug, provided you can show them you have identified the issue and are working on a solution.

Since I became a full time Indie, I have purchased Public Liability insurance in the event of something just like this happening. Whilst a EULA may be sufficient in most situations, it only takes one case to go to court in favour of the customer to cause a severe financial headache.

The best advice is to get someone who doesn’t know anything about your application to poke at it, if they can accidentally corrupt your project, so can a valid user!

Here are some things I’ve learned.

#1 Never assume that a user has a backup procedure, I recall seeing a statistic that cites less than 10% have any backup procedure.

  • Use atomic file saving (write elsewhere before replacing).
  • Use a structured file format, reducing the likelihood of mis-reading or mis-writing of data.
  • If you can, store incremental copies of the users data and offer a revert function.

#2 When deleting files, never use the underlying terminal commands.

  • Things can go wrong when passing instructions to the terminal and are potentially dangerous.
  • Never use the Xojo .Delete function on any file unless it’s a temporary file that your app created and no longer needs.
  • Use the correct OS API to move the file to the trash, this will often allow the user to ‘Put Back’ the file from the trash and gives them a buffer incase they change their mind.
  • Never user incremental deletion (i.e. looping through a folder), hard links and soft links placed with the folder can cause damage, instead use the above mentioned OS API to move said folder to Trash.

#3 Sandbox your application.

  • This will add some protection and reduce the likelihood of your application from eradicating files that the user doesn’t want eradicated.
  • It will also prevent an infected application from infecting others.
  • If your application has been cracked, then the code signature will no longer be your code signature.

Should you actually engage a company to transfer your license to someone else the company may actually be able to require access to your computer to verify that you have indeed removed the software, licenses & destroyed all back up copies.
see section 87 of the ruling at

[quote=59838:@Norman Palardy]Should you actually engage a company to transfer your license to someone else the company may actually be able to require access to your computer to verify that you have indeed removed the software, licenses & destroyed all back up copies.
see section 87 of the ruling at[/quote]

Don’t forget to say that includes showing SSL certificates, private informatio and any other documents. Basicly ANYTHING on your computer(s).

There’s an old adage that says “Be careful what you wish for - you just might get it”

I add the below text to the DMG file which asks the user to agree or disagree. If he selects disagree the dmg is closed and you cannot install the app.
This text is for shareware that needs a serial to unlock and should cover all claims.

BTW change to your needs.

End User License Agreement

This is a legal agreement between you (either an individual or an entity) and
Read this License Agreement carefully before using the accompanied data processing program.
By clicking on the “Agree” button, you are agreeing to be bound by the terms and conditions of this License Agreement. If you do not agree to the terms and conditions of this License Agreement, do not click on the “Agree” button.

  1. Grant of Limited License. grants to you the non-exclusive, limited right to install and use the accompanied software program (the “Software”). The license permits either (a) multiple users to install and use the Software on a single machine; or (b) a single user to install and use the Software on multiple machines. However, a single license does not allow multiple users to ever use Software on multiple machines, regardless of whether such use is concurrent.

  1. Copyright.

The Software is owned by and is protected by international copyright laws and treaty provisions. You should therefore treat the Software like any other copyrighted material. Among other things, copyright laws prohibit you from making derivative works of the Software. You may, however, make copies of the Software solely for your individual and personal use on multiple computers, provided that you do not copy the Registration Data (see Section 3(a) below) and further provided that you include all copyright and proprietary rights notices on any copies. Notwithstanding the foregoing, you may not make copies for use on multiple machines if multiple users (including employees, agents, or contractors) will use those machines unless you purchase a corresponding number of Registration Data sets which explicitly grants this usage.

  1. Other Restrictions.

(a) If your copy of the Software did not come with Registration Data, it cannot be used with its complete feature set. You can unlock the full feature set by donating. Registration Data via the Internet service Registration Data is bound to its purchaser and must not be transferred to third parties. A Registration Data set consists of a Registration Name which identifies the person of the purchaser and hereby the user of the Software in the sense of paragraph (1), and a Registration Key which uniquely identifies each usage license for the Software. In case the purchaser is not an individual, the Registration Data may include a written notice that defines for which individuals, or for how many copies of the Software, respectively, the license to use the Software is granted to in accordance with this agreement.

(b) You may not modify, reverse-engineer, decompile, or disassemble the Software.

© You may not claim that the Software is yours, and you may not use the name or to endorse or promote products derived from the Software without prior written permission.

(d) You may not distribute copies of the Software, in whole or in part, to any third party, nor may you rent, loan, sublicense, or lease the Software to third parties. You further may not use the Software to act as a service bureau or application service provider.

  1. Warranties and Limitation of Liability.

The software is provided “as is”, without warranty of any kind. further disclaims any implied warranties, including, without limitation, any implied warranties of merchantibility, fitness for a particular purpose, and non infringement. The entire risk arising out of the use or performance of the Software remains with you. Should the Software prove defective, you (and not assume the entire cost of all necessary servicing or repair.

In no event shall or anyone else involved in the creation, production, marketing, distribution, or delivery of the Software, be liable for any damages whatsoever; including, without limitation, damages for loss of business profits, for business interruption, for loss of business information, or for other monetary loss, arising out of the use of the Software or the inability to use the Software, even if you have been notified of the possibility of such damages.

In no event shall be liable for any special, indirect, or consequential damages, or for any damages whatsoever, whether in a contract action, negligence or other tort action, or other claim or action, arising out of, or in connection with, the use or performance of the Software or documents and other information provided to you by, or in the provision of, or failure to provide, services or information.

Because some states of the United States of America do not allow the exclusion or limitation of the liability for consequential or incidental damages, the above disclaimer may not apply to you. Any warranties that by law survive the foregoing disclaimers shall terminate ninety (90) days from the date you downloaded or otherwise received the Software.

The feature set of the Software is defined by the specification contained in it. and the end user agree in the fact that according to present technical state of the art, defects in software products cannot be fully excluded under all possible circumstances of usage. Subject of warranty is an application which is useful in principle according to its performance specification.

  1. Injunctive Relief.

Because of the unique nature of the Software, you understand and agree that will suffer irreparable injury in the event you fail to comply with any of the terms of paragraph 3 of this License Agreement and that monetary damages may be inadequate to compensate for such breach. Accordingly, you agree that will, in addition to any other remedies available to it at law or in equity, be entitled to injunctive relief, without posting a bond, to enforce the terms of this Agreement.

  1. Miscellaneous.

If any litigation is brought to enforce this License Agreement, or arises out of this License Agreement, the prevailing party shall be awarded its reasonable attorneys’ fees together with expenses and costs incurred in such litigation. This Agreement shall be governed by the laws of the Federal Republic of Germany, but not including the 1980 United Nations Convention on Contracts for International Sale of Goods. This License Agreement is the complete agreement between and you and supersedes all prior agreements, oral or written, with respect to the subject matter hereof.

I forgot to mention.

Add a check to your data files so you can compare which version of the application it was created with, then allow your user to act accordingly. You can adapt your application to store data it doesn’t know how to handle, or simply reject it. But you prevent a user from using an older version and buggering up their project.