TLDR for those who find this thread by search:
If you don't know which retention policy you need - pick retention by date, and keep retention by number of versions disabled.
,
First of all, you can set one, the other or two rules at once for deleting files - by date and by number of versions.
If both rules are active, your data can be deleted when ANY ONE rule is satisfied.
In most cases you want to choose only one rule that meets your business requirements (such as RPO). It is VERY rare you really need both rules active at once - if this is the case for you then you already know why exactly you need this.
If you don't know which one you need - pick retention by date, and keep retention by number of versions disabled.
Then, if you decide to use retention by number of versions, please read further.
"Full version" is 100% of the file.
"Block version" is xx% of the file, where xx% is how it changed since the previous version of the file.
In general, you can have a Full version followed by multiple Block versions.
This is called a chain, because each consequent Block version depends on a previous version, that one depends on its own previous version - and thus back to the Full version which does not depend on anything.
If you set maximum number of saved versions: 3, CloudBerry Backup for Linux will keep 3 Full versions - and any amount of Block versions in between them.
For example (let's imagine this is how the file was changing during some time),
Chain 1: Full - Block - Block
Chain 2: Full
Chain 3: Full - Block - Block - Block - Block - Block
At this point Backup for Linux keeps 3 Full versions.
When the 4th Full version is created, the 1st Full version and all its dependent Block versions will be deleted from the storage.
What may be confusing - the behavior is slightly different in Backup for Windows (and most help articles are based on the Windows version).
Backup for Linux counts only Full versions in retention by number of versions.
Backup for Windows counts all versions in retention by number of versions (it only deletes the whole chain when it can delete the last version in the chain).
We in Backup for Linux found this an unnecessary complication and implemented the idea in a simpler and more logical way.