This manual (updated 27 Dec 2012) is for Kypeless version 0.0-pa7-0, which is an peer-to-peer secure communication program, that provides you a possibility to exchange information in a secure way.
Kypeless is free and open source software, released under GPLv3 or higher.
This is a manual for the Kypeless, a p2p secure communication program.
It's main purpose is to deliver information to a desired person (further in the text - remote peer) in the way that nobody except him/her can access it.
The fact of existance of such connection is not hidden, though.
If used with care, Kypeless provides that:
Right now Kypeless allows you only to exchange text messages, but a lot more features are planned to be implemented.
If you are new to Kypeless, you may want to read the Quick Start Guide, and other topics suggested there.
Especially the Design Concept and Security Notices chapters.
Logically, Kypeless consists of two "modules" :
The core module (without the gui) is called kypeless-core, and the vanilla FLTK GUI module provided is called kypeless-gui.
While used together they form the program called Kypeless.
The official Kypeless website is http://www.kypeless.org.
Kypeless is released under the GNU GPL version 3 or later (see appropriate COPYING file or http://gnu.org/licenses/gpl.html)
Kypeless is being designed as fast and simple secure communication program.
Our first priority is security and simplicity, and only then user-friendlyness. It doesn't mean we do not care about the interface, it rather means that we try to carefully design the core first, and then expand the gui, adding new features or reorganising it.
Guide on installing Kypeless. Only linux support, for now.
To build and run Kypeless, you need to have the following libraries installed:
Depending on your system and package manager and also your preferred installation method, there are many different ways to aquire them.
You may download these libraries as source packages and build and install them, following the instructions provided by developers.
Or, alternatively, you may download pre-built packages for your distribution.
For example, Arch linux users would type in terminal
# pacman -S libgcrypt fltk
Debian/Ubuntu users would type in terminal
# apt-get install libfltk1.3 libfltk1.3-dev libgcrypt11 libgcrypt11-dev
etc. If you run another linux distribution, that should be fairly easy for you to figure out how to install pre-built libraries.
Kypeless is shipped as standard GNU package. So, standard
$ ./configure; make; sudo make install
commands after downloading and unpacking the package should do the job.
Though, as kypeless is under heavy developement right now, I would not recommend to run make install command after configuring in default prefix.
I would suggest to build and install Kypeless in separate directory. After unpacking the archive and entering the created directory:
$ mkdir build $ cd build $ ../configure --prefix=`pwd` $ make $ make install
That should build kypeless and install it in the same directory build you just created. If everything went smooth, the kypeless-gui executable should be located in build/bin.
This section is supposed to give you the minimal knowledge needed to use the Kypeless.
It is assumed that you have installed the program and it's dependencies already. Otherwise, please proceed to the Installation section.
There are three simple steps to start using Kypeless:
The very first thing you need to do is to create your profile.
Launch the Kypeless. Double-click kypeless-gui if in graphical file manager, or execute it in terminal ( $ ./kypeless-gui ). You need X server running to be able to start it, since what you are launching is graphical user interface built upon FLTK.
After you have launched it, you will see tabbed window with three tabs: Profile, Contacts, ####.
Select the "Profile" tab (should be selected by default.)
Click the "Create profile" button.
Follow the instuctions in dialogs: fill in the file name of your new profile (should match pattern "*.kyp", where * means anything), password for your new profile, and, finally, your username (it should be human-readable string, since that's what other users will see in their contact lists. NAME SURNAME is the template format I recommend). So, for example, "Alfred Boulder" would be a very nice username, and "Alfbd1983" would not.
WARNING: you will not be able to modify any of these 3 values later, so choose wisely. Read this section for more advice on topic: See Protecting Your Profile With Password.
Then, check all data once again and execute the profile generation by pressing "Yes" button in the last dialog.
You will need to help the random generator to gather random events by moving your mouse cursor in crazy manner all over the screen. I am not kidding, you do have to. Application may seem to hang or freeze, but it does not mean it really did, it is just busy generating your key. The generation may last for 5-10 minutes, so be patient. You won't generate profiles often anyway.
After the generation is done, your profile will be automatically loaded and you will see a lot of data in the profile tab. The "Load button" will change it's label to "Unload profile", and a neat yellow light will turn on.
That's it, you generated your profile. To unload it when done using, press "Unload profile" button. To load it when using Kypeless next time, press "..." button to select your profile file, enter your password and hit "Load profile" button. If everything is correct, your profile should load. And remember: NEVER rename your profile file. You can move it anywhere, but it's name always must be exactly as specified when generating your profile.
Note: Since password is not being rechecked, it is a good idea to reload your profile right after you generated it. If you can not load your newly generated profile while entering the correct password, you may have misspelled it the first time. If that's your case, generate your profile from scratch again.
Now you are ready to exchange PubInfos with someone.
First, load your profile.
Then modify your contact data to valid one. This is done by pressing "Edit MY hostaddr" and "Edit MY hostport" buttons. Read the section, which provides more information about these values: See Locating Remote Peers.
Reminder: please assure that no routers or firefalls are blocking your selected port, and that your provided host adress (IP or DNS) is valid. Otherwise, nobody will be able to connect to you.
Now you are ready to export your PubInfo file. Press the "Export PubInfo" button, and Kypeless will write it out. Your PubInfo file will be named in the following format: "XXXXXXXX_contact.kyc", where XXXXXXXX is your uID. You can see your uID clearly in your Profile tab (when profile is loaded, of course).
Your PubInfo is a file that describes your profile, provides data for your unambiguous identification and your adress, which can be used by anyone to connect to you.
You need to exchange PubInfos with somebody if you want to connect to him/her. It is not that easy, since both PubInfos must reach the other person intact, unchanged and unobfuscated. See the following section to read about ways of granting it: See Verifying Contact Truthworthness.
When you got someone's PubInfo (file, obviously, named like "ZZZZZZZZ_contact.kyc"), you need to go to the "Contacts" tab in Kypeless window and import it.
Click "Contacts" tab, and press "Import Contact" button. Select the PubInfo file you received, and press "Ok". The contact will be imported.
After importing the contact, you can delete the received PubInfo file, if you wish to. Technically, it's no more needed. Though, I'd recommend keping it at least until you managed to establish a connection to corresponding person. Just in case.
NOTE: When you press "Delete Contact", be sure one of the contacts in list is selected (it will be highlighted then), or Kypeless will simply ignore your click. This note also applies to most of the buttons on the "Contacts" tab.
To allow incoming connections, you must set trustlevel of the contact at least to 1. Select contact in the list by clicking it, press "Set TrustLevel" button, and enter value of at least 1 (or higher, if you already performed some checks on the validness of PubInfo you received).
After performing these simple actions, you should be able to communicate to the remote peer, whom you exchanged PubInfo files, and whose contact data is now stored in your profile in contact list. Make sure that remote peer also followed similar steps, or you won't be able to connect to him/her otherwise.
You have exchanged PubInfos and there is only one last step left - connect and chat!
Load your profile, go to "Contacts" tab. Select contact of the remote peer whom you want to connect to by clicking it, and then click "Connect"
After doing it, if everything is configured and set up correctly, you will see a question mark appear in square brackets in the line entry of selected contact.
At the same time, that remote peer will see an exclamation mark in line entry of your contact. In signalises him/her that you are trying to connect. He/She has 20 seconds to accept or deny the connection request, or it will be denied automatically. These actions are done using the "Accept incoming" and "Decline incoming" buttons.
If the pemote peer declines your connection, the question mark will disappear and connection will return to initial (disconnected) state.
Otherwise, it will turn into an octothorpe (#), which signalises about connection being established. The chat window with appropriate contact will open automatically.
That is, basically, all. Be careful to clear chat history time to time since all your messages are stored in secure memory, which is a limited resource. Right now gui segfaults when it runs out of secure memory, so you have been warned.
There is a yellow bar indicator on the left lower corner of Kypeless window. The yellow space indicates used secure memory,
and the white one shows secure memory remaining. Theoretically, Kypeless works well until there is a lack of secure memory, and then segfaults
(It's not that bad, the core module handles all memory related errors, that's the gui module which segfaults actually.
But, being the end user, you do not care about such nuances).
Practically, I would recommend not to let the secure memory usage raise above 75% of total value. It is 750kb of 1000kb, with default secmem amount, and it is still safe condition (assuming that you and the remote peer exchange short messages less than 1000 symbols each, like most of us usually do), but the cost of mistake (segmentation fault) is too high to take any risks. You can dump the secmem usage stats to standart output, if you press the button named "DUMP SECMEM STATS".
Most secure memory is consumed by chat message buffer, which can be cleared easily, pressing the narrow "Clear Chat History" button in each chat window, messages in that you do not need anymore. Your messages will be gone forever, and memory will be freed.
The "Disconnect" button does exactly what you expect, in both places where you will find it.
See the Kypeless-gui section for deep explanation of all gui functions.
This chapter tries it's best to explain the meaning of every single button in the GUI.
The first thing you will see while opening Kypeless with vanilla GUI is tabbed window. Let's see what is in there.
SORRY, SECTION NOT PRESENT YET
The format for running the Kypeless program with vanilla GUI is:
kypeless-gui option ...
With no options, kypeless-gui tries to start the kypeless, allocating default amount of secmem.
kypeless-gui supports the following options:
This chapter explains the basic concept of design of the Kypeless, the thing which average user needs to know. It also links to some important security topics, please do not skip these references and read the suggested chapters carefully.
You should keep in mind, that Kypeless' main purpose is to grant secure communication, and the more you understand, the harder it is for the bad guys to fool you. So do not be afraid of a name of this chapter and read ahead bravely.
Each section of this chapter is divided on 2 parts:
The first one is written for regular users, who do not know what the asymmetric cryptography is
The second adds some information for more advanced users, who posess such a knowledge.
If you belong to the first group it would be a very nice idea for you to do some reading on topic.
So, the design concept:
It is assumed that you trust the person you are going to communicate with.
It means that the person you are going to communicate with and you both are interested in the transaction data (whatever it is, text or files or etc.), being kept in secret, and you both are doing your best to do so and do keep your Kypeless profiles secure and private.
If this requirement is not met, all other security measures are useless. This should be pretty obvious point.
It is also assumed that your both keep your computer clean of malware and spyware and etc, or at least try your best to. See Security Notices, for detailed explanation.
Each user is represented by a profile in Kypeless. Your profile is a file on your PC. Pretty simple, eh?
Your profile is your everything - it contains your identity validation key (private-key), your contact list with their identity validation keys (public-keys), your name, and other sensitive info.
Since profile is so important, it is password protected. You must read the security notice about keeping your profile secure.
Kypeless uses asymmetric encryption for personality verification, and your profile acts as a keyring for your private-key and your friend public-keys.
While communicating, Kypeless takes care of two things: 1) Verifying the adressate's personality; 2) Transmitting the information securely.
The Kypeless does the second thing, and you, being a user, no dot need to worry about it. But you must be very careful about the first one.
Kypeless needs to 'get aknowledge' about people whom you are going to communicate, so it can verify their identity while establishing connection.
After connection is established, the data can be transfered between you and the remote peer.
This is done by importing tiny .kyc PubInfo files - some kind of contact 'visitcards' (containing user public-keys and adresses).
Note: To communicate, two users must exchange their contact info's, which means that both of them have to send their PubInfo's to each other.
There is a Security note you must read right now. See Verifying Contact Truthworthness.
While connection is being established, two peers use asymmetric cryptography to validate each other's identity (using pre-shared public keys)
and exchange symmetric encryption keys. After connection had beed established, the actual data transaction is performed using symmetric cryptography.
See Used Algorithms.
Kypeless is peer-to-peer communication program. It is fully decentralised (has no master server), so it's up to the clients to find each other and aquire each other's adresses, so the connection can be established.
Right now there is no any kind of network structure supplied with Kypeless. It may be added later, as an additional daemon/utility/anything. It also may not.
Anyway, now there is only one way to connect to remote peer - supplying his/her ip or DNS name and port, which are specified in remote peer's PubInfo file you imported.
You may find this tip extremely useful.
It's not decided yet if Kypeless needs any kind of it's own network.
This chapter provides some useful tips and workarounds on using Kypeless.
Getting connection info about remote client (which is target IP and port) may be rather hard, especially if the IP is dynamic.
Problem with the port may be solved using the default kypeless port - 32323. Try to stick to it if possible. If not - use 32322, then 32321 and 32320 in specified priority order.
I am really sorry, because suggessions provided below in the following two paragraphs are DIRTY HACKS. There are not many alternatives for now, and these suggessions may come in handy. Sorry once again.
There is a solution for dynamic IP owners - you may set up a free dynamic dns (there are some services providing such feature over the internet). This means that you will get the hostname, which links to your IP, and relinks to your new IP when your IP does change!
If you can not set it up for some reason, get some simple free domain so you could redirect it where ever you want manually. It's a good advice for static IP owners too - it's always easier to remember DNS name nor an IP adress.
Note: Your address and port are included in every PubInfo file you generate, so setting up your adress and port before exchanging PubInfo with anyone is a very good idea.
It is also a very good idea to never change the adress and port you set since then (and that's where DNS names are handy).
Ways of solving the trustworthness problem. Of course these are not the only ones, but you should get the main idea. In all of these suggessions, it is assumed that Alice and Bob have just created their Kypeless profiles, and need to exchange PubInfo in order to communicate.
- Alice and bob exchange their PubInfo in any convinient way, secure or not, and import it into their Kypeless profiles.
- Alice writes down her own PubHash and PubHash of hers new imported contact (which is supposed to be from Bob).
- Bob writes down his own PubHash and PubHash of his new imported contact (which is supposed to be from Alice).
- Alice and Bob meet in person
- Alice verifies if her written down imported contact PubHash matches Bob's own PubHash.
- Bob verifies if her written down imported contact PubHash matches Alice's own PubHash.
- If both keys match, then Alice and Bob have succesfully exchanged PubInfos and now may enjoy their secure communication opportunities! They can both mark contacts of each other with the highest trustlevel possible in their profiles.
The same as the Method 1., but with different 4th step - instead of meeting in person Bob and Alice phone each other or use some real-time voice-transmitting software. It is slightly less secure than the method above, but as long as they both can verify each other's identity by phone it's ok. This method is also worth highest trustlevel mark in their profiles.
Alice and Bob are too lazy to write hashes down, but they both have spare data storage devices, e.g. flash drives. So, they both write their PubInfos onto flash drives and physically exchange them when meeting in person (no intermediary are allowed). Theoretically, all the data should stay intact this way, although checking hashes is always safer.
TODO ADD METHODS
To make your life easier, kypeless introduces a simple trustlevel flag,
that you are free to modify for every contact in your profile. It is set to 0 for every new imported contact,
and you are free to set it to whatever you want. It is there only for your convinience, and it does not affect the behavour of Kypeless,
with one important exception - contacts with trustlevel set to 0 are not allowed to connect (Their incoming connections are denied automatically).
Although I recommend you to stick to the values, suggested in the link below (there is a hint in the Kypeless itself too).
See TODO REF, for detailed description
Some technical data about Kypeless. This chapter may be useful to programmers or anyone else who is trying to understand/modify/extend the source code of Kypeless.
If you are a regular user, you don't need to read this chapter
Kypeless uses the following algorithms for performing encryption:
Some explanation on packets & network should be here!
As you should already know, logically the Kypeless program consists of two independant parts: kypeless-gui and kypeless-core.
The program is split to make new GUI integration easier.
The core module manages all profile, contact and connection related data and is not dependant on the GUI.
It is not a library, though, it is just the GUI-independant core of the program.
The GUI module only provides the user interaction with the core module and is dependant on the specific version of it.
You are free to write your own GUI if you want to. It is recommended to stick to the original GUI for now.
Although, if you are writing a gui for kypeless, remember - any security leak in GUI makes all the protection of the core useless. _EVERY_ single securuity leak.
This section explains the structure of core module briefly. You can find more detailed explanation of the fields and functions in the code itself.
Kypeless-core has the version number, consisting of the major number, minor number, and the release type string in this format:
kypeless-core major.minor-releasetype kypeless-core 0.1-b2
Kypeless-gui is dependant on the kypeless-core, and is written for specific version of it. Since then it shares the version number of kypeless-core, appending it's own version number to it:
kypeless-gui major.minor-releasetype-guiversion kypeless-gui 0.1-b2-1
Since users never interact directly with the kypeless-core, the version number of the kypeless-gui is used as the version number of current release of the Kypeless program:
When version number of kypeless-core changes, the shared version number of kypeless-gui must be changed, and it's guiversion number must be reset to 0. The kypeless-gui's own guiversion number is increased only when gui module was modified, while the core module was not.
This is the topic you must read if you are beginning to use Kypeless. It explains some very important security related questions - the must-know for every Kypeless user.
the first thing you should understand: (exact copy of the paragraph in the 'Design Concept' chapter)
It is assumed that you trust the person you are going to communicate with. It means that the person you are going to communicate with and you both are interested in the transaction data (whatever it is, text or files or etc.), being kept in secret, and you both are doing your best to do so and do keep your Kypeless profiles secure and private. This is pretty obvious point.
Are you using the genuine Kypeless? Can you prove it?
There are several suggessions about keeping your profile secure. Since the only thing Kypeless is about being privacy and security, you must read them all.
The password is the only thing that protects your profile from being accessed. You must make it VERY difficult to hack. If you do not know what strong password means, DO SPEND YOUR TIME to do some reading about it. If you are able to, consult some security experts about what the strong password means. If it is not your case, do some reading in the internet. Do your best to produce as strong password as you can. The spent time will be worth it.
Note: The password is the only thing that protects your profile. If your profile gets stolen, you are safe as long as your password is strong enough.
Warning: IF YOU LOSE YOUR PASSWORD - YOUR PROFILE IS LOST FOREVER. I'm not kidding, that is the price of security.
Warning: Never tell your password to anybody. Although it is obvious, I remind you once again - Never ever do it.
It is not the worst idea to write down your password (on the piece of paper, of course, no virtual data carriers do fit this purpose) until you learn it. Of course this piece of paper should be hidden properly. It is all up to you, you have been warned.
Unfortunately, the strong password being the condition of keeping your profile secure, it is far not the only one. After the strong password was selected and your profile was created, you must care about it's security every-single-time you use Kypeless. Do not panic, I do not mean any annoying actions that you should perform every time you want to load your profile. I mean thinking.
TODO CONTINUE SUBSECTION
When Kypeless receives a PubInfo of a contact, it can not verify it's truthworthness, since it gets 'aknowledged' to the person/contact for the first time.
So, you actually can not know whose PubInfo you have received. Your traffic may be controlled, and the PubInfo may be spoofed.
If you got it from the internet, it might have been faked too. Usually, there is no secure source of information that contacts coming from can be trusted.
The idea is pretty much the same as with the public keys in asymmetric cryptography, if you understand what I am talking about. Deeper explanation of this principle it is outside of the scope of this manual.
There are several ways of solving this problem of trustworthness, which are covered in the Usage Tips chapter. See Verifying Contact Truthworthness.
Right now, there is so few code to deal with, that we are not seeking for more coders. Another reason for this is that this project was started with a half-educational purpose of mine, so that's the reason I would like to write the core myself (which is not even conceptually close to complete). The vanilla gui too, actually. I Hope you understand my motives correctly.
But that does not mean we do not search for volunteers. Of course we do. We do search for testers, package maintainers (in a long-term, as here is nothing to maintain yet), and more testers. Please remind me if I forgot someone.
We are in need of bug reports, testing, code reviews (if anyone would be so kind to do some), any constructive critics, any suggessions, actually your opinions on any part of the project. I mean more or less unprejudiced opinions.
And of course we appreciate donations. The more the better. (You can donate on our webpage via paypal).
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. http://fsf.org/ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.
This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.
We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.
This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.
A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.
A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.
The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.
A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”.
Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.
The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.
The “publisher” means any person or entity that distributes copies of the Document to the public.
A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition.
The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.
You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and you may publicly display copies.
If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.
You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.
You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.
You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements.”
You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.
Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.
If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.
The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.
“Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A “Massive Multiauthor Collaboration” (or “MMC”) contained in the site means any set of copyrightable works thus published on the MMC site.
“CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.
“Incorporate” means to publish or republish a Document, in whole or in part, as part of another Document.
An MMC is “eligible for relicensing” if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.
The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.
To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
Copyright (C) year your name. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''.
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with...Texts.” line with this:
with the Invariant Sections being list their titles, with the Front-Cover Texts being list, and with the Back-Cover Texts being list.
If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.
If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.