Versioning in Plone
Versioning is about tracking changes over time
Information, in whatever form: documents, spreadsheets, web pages, or source code, changes over time. 
Tracking changes of a document over time is what a versioning system does.
In particular a versioning system records who made a specific change, it allows backing-out undesirable changes, it gives the ability to record why a specific change was made and to know what the document contents were at a specific point in time.
Versioning a content is basically archiving important document versions, to have control on changes over time. Can I modify a content without retracting it, that is edit it while the published version of it stays visible to everyone? No, you can't. This feature, often confused with versioning is more appropriately a staging feature. If you want staging in Plone you have to use a stagin product like PloneMultisite.
Versioning must work with staging, workflow, i18n, ...
Versioning is independent from staging or multisite implementation (PloneMultisite), from versions repository (storage) and from contents implementation; in fact versioning can be added at any time in the system, as contents do not need to be aware that they are versioned.
Versioning must work with multilingual content also: CMFEditions can work with LinguaPlone.
Any content can be versioned: CMF Default, ATContent Types, custom Archetypes based contents. CMFEditions supports the versionining of composite folderish objects and versioning of references.
The save as new version (or save important) creates a new version, but can also trigger things like translation invalidation, events (for example for content subscription), etc.

Author: