RosAsm General Public License
Version 1.0, 31 January 2.004
This is the official license for the RosAsm Project.
Released versions: 1.12d; 1.12c ; 1.12b ; 1.12a ; 1.11b ; 1.11a ; 1.10e ; 1.10d ; 1.10c ; 1.10b ; 1.10a ; 1.9c ; 1.9b ; 1.9a ; 1.8d; 1.8c; 1.8b ; 1.8a ; 1.7c ; 1.7b ; 1.7a ; 1.6b ; 1.6a ; 1.5c ; 1.5b ; 1.5a ; 1.4a ; 1.3a ; 1.2a; 1.1a. Former project - Spasm: 4.15j ; 4.15i; 4.15h; 4.15g; 4.15f; 4.15e; 4.15d; 4.15c; 4.15a; 4.14b; 4.14a; 4.13e; 4.13d; 4.13c; 4.13b; 4.13a; 4.12g; 4.12f; 4.12e; 4.12d; 4.12c; 4.12b; 4.12a; 4.11e; 4.11d; 4.11c; 4.11b; 4.11a; 4.10e; 4.10d; 4.10c (V.E. Experimental Version); 4.10b; 4.10a; 4.09b; 4.09a; 4.08c; 4.08b; 4.08a; 4.07c; 4.07b; 4.07a; 4.06b; 4.06a; 4.05e; 4.05d; 4.05c; 4.05b; 4.05a; 4.04e; 4.04d; 4.04c; 4.04b; 4.04a; 4.03a; 4.02c; 4.02b; 4.02a (V.E. Experimental Version); 4.01c; 4.01b; 4.01a; 4.00c; 4.00b; 4.00a; 3.08c; 3.08b; 3.08a; 3.07e to 1.01; 1.00
a) History of the Software
SpAsm - The Specific Assembler - was created in the September 1998 by René Tournois (also known as Betov), which was maintained and supported by him until 24 July 2003. It was then continued with its successor, RosAsm. René is RosAsm's principal author, although it includes many contributions from others. The very first version of the former Spasm project was built in 16 bits using the free version of a shareware assembler called A86/A386, from Eric Isaacson. With the help of this remarkable program, René continued improving his programming skills until he faced the world of 32 bit programming. In less then Two years, he migrated from A86 to the ASM32 assembler - by Intelligent Firmware Ltd -, whose simplicity, flexibility and very reliable overall performance for system programming, helped him to develop his own, independent and free assembler made entirely in 32 bits. In July 2000, Spasm 1.00 was born.
Since then, René continued his work, for several years, almost alone, releasing several versions of the Software. All versions released were maintained and developed under the GPL rules, in order to give to the assembly community a new and powerful tool, and for mankind in general, a free gift that can be used to improve their lives wherever possible by the continuous development of high technologies making them available to the public. In time he gained contributors that helped to improve his assembler.
Spasm 4.15j ,was the last of the versions released and maintained by René. On 24 July 2003, he decided to take a higher step toward advancing the benefit of Assembly Language and the free programming community. Concerned about the ongoing of the Software and his constant efforts in keeping with his ethical and political views, he left the project. From that remarkable day, RosAsm was born!
RosAsm 1.1a was the first version from the renewed Software, released on 27 July 2003.
RosAsm 1.13 is basically the same as RosAsm 1.12, with a few minor bug fixes, and with a license that enables later versions to be GPL-compatible. All versions of RosAsm are a derivative work of all previous releases of SpAsm, except from it's version 4.15k (and newer) which are being developed and maintained by independent contributors.
Thanks to the all volunteers who have worked under René's direction to make these releases possible.
b) Preamble
RosAsm General Public License is intended to guarantee your freedom to share, change and redistribute free Software, making it free for all its users. This Public License applies to all of RosAsm's Software and to any other program whose author commits to using it, and it is also covered by the official GNU General Public License, whose copy is released with ours.
You are free to apply this License in your programs, although you may need to adapt it to your Software usage and development, or if you prefer you can use the official GNU Generic Public License or the Lesser General Public License, or others related to free licenses available on the Free Foundation website.
The term 'free Software' used on this license, refers to freedom, not price. This License was designed to make sure that you have the freedom to distribute copies of free Software (and charge for this service if you wish), that you give or receive source code or can get it if you want it, that you can use or change the Software or use pieces of it in new free programs; and that you know you are allowed to do these things.
To protect your rights, this license contains clauses that prevent you from anyone who eventually tries to deny you these rights or to ask you to surrender to their rights. These precautions translate to certain responsibilities for you if you distribute copies of the Software, or if you modify it.
If you distribute copies of this program (or parts of it), whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
We protect your rights with two steps: (1) copyright the Software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the Software.
Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free Software. If the Software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
Finally, any free program is threatened constantly by Software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
c) Reverse Engineering
One of the features of the software is a disassembler that is being developed to help the user to recover his/her source code, in cases of loss of data or document or damages on the original source he was working with, but also for helping him to translate his/her application from a computer to Asm, to be used in RosAsm.
A disassembler is a tool that is used as one of the techniques for reverse engineering a program, in order to analyze or study the application, finding how it works, either it is used only for educational purposes, either for building or improving his/her own application, either it was built in assembler or in other languages.
This feature inside RosAsm is intended to help the user have more control on the applications he is building, and even helping him to learn how to migrate to a language that he is using to build his/her programs in assembly.
Reverse engineering is the scientific method of taking something apart in order to figure out how it works. This method has been used by innovators to determine a product's structure in order to develop competing or interoperable products. It is also an invaluable teaching tool used by researchers, academics and students in many disciplines, who reverse engineer technology to discover, and learn from its structure and design.
RosAsm's disassembler or other features that eventually were being built are not to be used to break any patent or copyright rights, but only should be used in applications where the user owns, or are permitted to perform the disassembler methods, or to translate his/her own sources to assembly code.
Some reverse engineering techniques require making a copy of the software being investigated, an act that would otherwise be considered a copyright violation, but, in the United States, Europe and in several other countries, copyright law has allowed these reverse engineering copies as a form of 'fair use.' Increasingly, however, contract clauses forbidding reverse engineering are included in technology licenses. Sometimes sellers include these clauses in 'shrink-wrap,' 'click-wrap,' or 'browse-wrap' licenses without enabling the user to negotiate the terms of such a license. In many instances, users are not even aware of the terms to which they are binding themselves. In the United States, for example, the proposed amendment to contract law called the Uniform Computer Information Transactions Act (UCITA), already adopted by some State Legislatures, would make these kinds of contracts enforceable, and therefore more difficult to challenge their anti- reverse engineering provisions.
When creative expression is protected by a technological protection measure, the situation becomes even more complex. The Digital Millennium Copyright Act (DMCA) generally prohibits circumvention of technological protection measures. On its face, since circumvention is generally required for reverse engineering, this prohibition would prevent reverse engineering of those measures that control access to a copyrighted work. The DMCA contains a limited exception to the ban on circumvention, which permits reverse engineering of the technology by specific classes of people for limited purposes. The exception allows reverse engineering of computer programs if the reverse engineer lawfully obtains the program, seeks permission from the copyright owner, only uses the results of their efforts to create an interoperable computer program and does not publish the results. The resulting program must only interoperate with the reverse engineered software, however, and cannot interoperate with the technologically protected content (movie, book, video game, etc.) itself. Under the DMCA, engineers may also develop programs that facilitate reverse engineering for their own use or the use of others if they meet the above test. Reverse engineers must carefully consider their planned work and whether it fits into the exception, because the exception is far too narrow to be useful for many reverse engineering needs.
Reverse engineering as a method is not confined to any particular purpose, but is often an important part of the scientific method and technological development. The process of taking something apart and revealing the way in which it works is often an effective way to learn how to build a technology or make improvements to it.
Through reverse engineering, a researcher gathers the technical data necessary for the documentation of the operation of a technology or component of a system. In 'black box' reverse engineering, systems are observed without examining internal structure, while in 'white box' reverse engineering the inner workings of the system are inspected.
Through these methods, researchers are able to examine the strength of systems and identify their weaknesses in terms of performance, security, and interoperability. The reverse engineering process allows researchers to understand both how a program works and also what aspects of the program contribute to its not working. Independent manufacturers can participate in a competitive market that rewards the improvements made on dominant products. For example, security audits, which allow users of software to better protect their systems and networks by revealing security flaws, require reverse engineering. The creation of better designs and the interoperability of existing products often begin with reverse engineering.
A common misperception regarding reverse engineering is that it is used for the sake of stealing or copying someone else's work. Reverse engineering is not only used to figure out how something works, but also the ways in which it does not work.
Ø Some examples of the different uses of reverse engineering include:
Ø Understanding how a product works more comprehensively than by merely observing it
Ø Investigating and correcting errors and limitations in existing programs
Ø Studying the design principles of a product as part of an education in engineering
Ø Making products and systems compatible so they can work together or share data
Ø Evaluating one's own product to understand its limitations
Ø Determining whether someone else has literally copied elements of one's own technology
Ø Creating documentation for the operation of a product whose manufacturer is unresponsive to customer service requests
Ø Transforming obsolete products into useful ones by adapting them to new systems and platforms
So, in general terms, Copyright does not prohibit reverse-engineering, except in the United States, according to the DCMA, where the thing being reverse-engineered is a copy-prevention mechanism. This is because copyright law is all about the making and distributing of copies. Under regular property law, once you have bought something, you're perfectly within your rights to take it apart and see how it works.
Of course, most software doesn't subject itself to such things. Thanks to a massive land-grab early in our industry's existence, back before anyone really knew what 'software' was, nobody actually buys software. Instead, you license the use of it under ludicrously draconian terms. Anyone who reads a EULA closely (and nobody really does) and looks at the masses of restrictions and arbitrary termination clauses ends up wondering whether they've bought anything substantial at all.
Norman Richards, in his work 'The ethics of decompilation', released on 03 September 2.003, already stated that the primary use of a decompiler is understanding why the code that you are using is broken
However, the above remarks do not imply that you are able to use RosAsm to disassemble or decompile, or in general terms, reverse engineer copyrighted or commercial applications.
You should use RosAsm disassembler and reverse engineering techniques exclusively in your own applications or in those that you have full authorization to perfom such operations on, or the ones without restrictions like those under the rules of the Open Source movement or are granted by the Free Software Foundations or generally speaking, are in Public Domain.
Any bad usage of RosAsm to deliberately break any copyright or patent law in any country is totally prohibited, causing the termination of this License instantly.
d) Terms and Conditions of the Software usage
RosAsm License Agreement
1. This License Agreement is between René Tournois, and the Individual or Organization ('Licensee') accessing and otherwise using RosAsm Software in source or binary form and its associated documentation.
2. Subject to the terms and conditions of this License Agreement, René Tournois hereby grants Licensee a nonexclusive, royalty-free, world-wide license to any person obtaining a copy of this Software and associated documentation files, to deal in the Software without restriction, including without limitation the rights to use, reproduce, analyze, test, perform and/or display publicly, prepare derivative works, prepare based works, distribute and/or sell copies of the Software, merge, modify, translate into another language; copy, and otherwise use RosAsm alone or in any derivative version, and to permit persons to whom the Software is furnished to do so, provided, however, that RosAsm's License Agreement and RosAsm's notice of copyright, i.e., 'Copyright (c) 1998/2004 René Tournois; All Rights Reserved' are retained in RosAsm alone, in any of it's derivative versions, in all copies of the software prepared by Licensee, and this License and the above copyright notice(s) appears in supporting documentation.
3. In the event Licensee prepares a derivative work that is based on or incorporates RosAsm or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to RosAsm.
4 - The term 'derivative works' stands for any program created using RosAsm assembler, that not necessarily will be used as an integrated part of it, but incorporates or helps the development of the software, either the Licensee builds an standalone application, a Library, documents, tutorials, demos or translation to his/her own language. For example, if the Licensee develops a standalone application or documentation that will be used with RosAsm, he/she needs to keep the source code available (or inside his/her application, or as an outside document) and insert a brief summary of the changes.
If the Licensee built a document, tutorial or help files, that will be used as an derivative work of RosAsm, obtained by research of other people's work, he should provide the source of his/her research, taking care of inserting the bibliography used, and in case of a literal transcription, he/she should mark the text with a brief note referencing the author who wrote it. These brief notes and references also apply when the Licensee wrote or did the research based on his/her own work.
5 - The Licensee is free to use RosAsm to build his/her own and independent programs, which means building a 'work based on the Program', he agrees to create them respecting all terms of this License whether the program is focused to improve the Open Source and Free Software movement, whether it is focused to Commercial applications, inserting a small reference that his/her application was built using RosAsm followed by RosAsm's notice of copyright.
6 - The Licensee who prepares a work based on RosAsm, focused on the Open Source or Free Software movement, may choose the License that best fits with his/her software, available at the Free Software Foundation, or with the RosAsm package, or build one on his/her own that is coherent to the usage it is intended to be built for.
7 - This License only covers the activities focused on the building of 'derivative version', 'derivative works', translations, building documents and others related to the improvement of RosAsm, as specified above in Sections 2, 3 and 4. Activities described in Sections 5 and 6 are not covered by this License, because they are outside its scope and therefore, needs to have their own and independent License that best fits their usage.
8. The origin of this software must not be misrepresented; you must not claim that you wrote the original software nor it's documentation.
9 - Altered source versions or documentation that were not maintained by the original author, must be plainly marked as such, and must not be misrepresented as being the original software.
10 - You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you 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, as stated in Section 2 of this License.
You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
11 - You may modify your copy or copies of the Program or any portion of it, thus forming a derivative work or derivative version of the Program, and copy and distribute such modifications or work under the terms of Sections 2, 3, 4 provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
b) You must cause 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 at no charge to all third parties under the terms of this License.
c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work derived on the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works or works based on the program, as stated in Sections 5,6,7. But when you distribute the same sections as part of a whole which is a work derived on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your rights to a work written entirely by you; rather, the intent is to exercize the right to control the distribution of derivative or collective works based on the Program.
In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
12 - You may copy and distribute the Program (or a derivative work or version of it, under Sections 2,3,4) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
13 - You may not copy, analyze, use, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
14 - You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work derived on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
15 - Each time you redistribute the Program (or any work derived on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
16 - If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
17 - If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
18 - If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission.
19 - Anyone is free to use, distribute and perform the acts of the Program according to the terms of this License, either if the Licensee is a single person, or civil organization or institute, like schools, universities, research centers, hospitals, health centers, engineering or computer companies, non-governmental organizations, and all others related to the civil and humanitarian purposes.
20 - The License does not apply and the Program and all it's 'derivative works', 'works based on the Program' and documents, tutorials, demos and all related material, are forbidden to be used, copied, distributed, translated, analyzed, modified, and perform any of the acts described on this License, by military, Para-military, political, or any Governmental Agencies, Organizations, Institutes and related personal/staff of any Country, especially when the purpose of the usage of the Program is related to them. The personal and organizations, institutes and anyone described on this section 20, should only use this License and the program, related materials and described works, upon request, and only after express authorization of the original author, which will analyze the purpose of the requested License in each specific situation, rebuilding or adapting this License when it's needed.
21 - This Software is available to Licensee on an 'AS IS' basis. THE ORIGINAL AUTHOR OF THIS SOFTWARE AND HIS CONTRIBUTORS MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF ROSASM WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS OR CONTRIBUTORS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE OF DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22 - THE AUTHOR AND HIS CONTRIBUTORS SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF ROSASM FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING ROSASM, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
23 - The original author of this software may revise this license from time to time. Each revision is distinguished by a version number. You may use this Software under terms of this license revision or under the terms of any subsequent revision of the license.
24 - This License Agreement will automatically terminate upon a material breach of its terms and conditions.
25 - This License Agreement shall be governed by and interpreted in all respects by the Federal Intellectual Property Law of France and without limitation on the French Federal Copyright Law, excluding conflict of foreign law provisions. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between neither the Software author nor it's contributors and Licensee. This License Agreement does not grant permission to use RosAsm's trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party, which means that the name of the author and his contributors shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without specific prior written authorization.
25 - Everyone is permitted to copy and distribute verbatim copies of this license document, and translating it to your country language, but changing it contents is not allowed.
27 - By clicking on an 'Accept' button where indicated, or copying, installing or otherwise using RosAsm, Licensee agrees to be bound by the terms and conditions of this License Agreement.