-
-
Notifications
You must be signed in to change notification settings - Fork 800
Description
update: as there was no negative feedback from alpha testing, borg2 branch was merged into master, thus that big change in form of a major / breaking borg 2.0 release is coming.
read below about what's planned and what's already done.
what could be done if we decide to make a breaking release (2.0) that:
- does not try to be compatible with old repos
- does not try to be 100% compatible with old cli syntax (but 90%)
- only uses new repos / keys it created itself
- only gets old archives via borg import-tar or borg transfer
putting all the breaking stuff into 1 release is good for users (1 time effort), but will take quite some time to test and release.
After borg 2.0, we'll make a N+1 release (2.1? 3.0?) that drops all the legacy stuff from the codebase, including the converter for borg < 2.0 repos.
borg 2.0 general comments
DONE: offer a borg transfer command, #6663, that transforms old stuff only to stuff that will still be supported by borg N+1.
N+1 general comments
much of the stuff described here has own tickets, see "breaking" label / add issue links here.
2.0 crypto
- DONE repo-create: do not create old keys (pbkdf2, legacy AES class, encrypt-and-mac)
- DONE repo-create: do not create AES-CTR based repos, only new AEAD ciphers with session keys
- DONE: remove all docs talking about potential nonce reuse, counter management and related
- DONE: remove key algorithm change (pbkdf2<->argon2), just use argon2 for new repos/key
- DONE: nonce management code for aes-ctr, not needed any more with session keys, remove nonces module remove nonce management, related repo methods #7556
- keep old crypto code, we need it to read / decrypt old repos
N+1 crypto
- remove pbkdf2 + pbkdfs/sha256 keys + docs - we have argon2 now
- remove low_level.AES class which is only used for pbkdf2 key encryption
- remove aes-ctr mode
- remove support for super-legacy passphrase-key type (not supported since long)
- we used hmac-sha256 and blake2b as id-hashes in the past, thus we need to keep them because we need an efficient
borg transfer(not needing to re-hash)
2.0 repo
- DONE: implement new repository based on
borgstore, use borgstore and other big changes #8332 - DONE: implement sftp: borgstore backend (a remote backend that does not need borg serve on the remote).
- DONE keep support for reading borg 1.x repos
- DONE read-compatibility with old local repos for
borg transfer, and/or - DONE read-compatibility with old RPC (ssh: repos) for
borg transfer(in that case the old repo would be served by an old borg version) - DONE borg check only checks new repos, no support for old repos
- DONE only generate latest hints format (this is done since long)
- DONE remove detection of attic repos, remove remainders of attic legacy #6859
- DONE remove free nonce / nonce reservation api
N+1 repo
- remove support for reading borg 1.x repos
- if we reduce MAX_OBJECT_SIZE from ~20MiB to 16.000.000, 24bit are enough for the entry length
- better alignment for segment entries together with the 1 type byte.
- in-memory indexes have 8 free bits without using more memory
- max archive size goes down by 20%!
- do not allow 16MiB objects, we need some room for potential header size increase in future
- nope, we cannot do that: we need an efficient
borg transfer, not needing to re-chunk content!
2.0 indexes / cache
- DONE remove
legacy_cleanupfunction - DONE no repo index needed anymore, objects are stored separately and directly access via their id
- DONE no chunks index persisted/synchronized anymore, existing chunks are queried from the repo.
N+1 indexes / cache
- remove legacy indexes / caches
2.0 msgpack
- DONE keep bigint for reading old stuff, write with Timestamp instead of bigint get rid of bigint stuff #2323
- DONE read legacy str/bytes types for reading old stuff, write only more modern msgpack types (for str vs bytes), cleanup msgpack str/bytes type mess #968
N+1 msgpack
- drop support for bigint stuff get rid of bigint stuff #2323
- drop support for legacy msgpack str/bytes types cleanup msgpack str/bytes type mess #968
2.0 archive / item
- DONE always have borg12_meta in newly created archives (includes
borg transfer) (note:Archive.save()adds that) - DONE borg2: there is no csize #6763 we always have the borg12_meta, we don't have "old" archives: remove support cache for old archives
- DONE borg2: there is no csize #6763 drop support for csize in item chunk list the new (c)size ticket #2357
- DONE transfer: clean stoneage attic bug leftovers, remove erroneous b'acl' key from item metadata
- DONE remove stoneage attic bug support in borg check -> valid_item (erroneous b'acl' key)
- DONE upgrade items with chunks to always have precomputed
size - DONE borg2: there is no csize #6763 read: also still support csize in item chunk list the new (c)size ticket #2357 ("support" here means to tolerate 3-tuples and just throw the csize away and make a 2-tuple of it)
- DONE borg2: there is no csize #6763 write: get rid of csize in item chunk list the new (c)size ticket #2357 (borg transfer)
- get rid of hardlink_master and complex code dealing with it, tends to cause issues. Getting rid of internally soft-linked hard-links #855 hardlink slave items, add chunk list? #2325
- DONE: borg transfer converts this
- DONE: borg create / extract needs to work the same way with hlid
- DONE: borg recreate
- "DONE": borg import-tar - drop support for hardlinks for now, see ticket ...
- DONE: borg export-tar
- borg import/export-tar BORG mode?
- DONE Document hardlink handling, HardLinkManager / hlid #2388
- DONE duplicate archiving / hardlink extraction issue #5607
- resolve dual use of item.source (hardlink and symlink), item.source is dual-use #2343
- DONE: borg transfer converts this
- DONE: borg create / extract needs to work the same way with hlid
- DONE: borg recreate
- borg import/export-tar BORG mode?
- DONE: remove chunks_healthy and handle missing chunks dynamically, borg2: reconsider chunks_healthy approach #8559
- rename item.source to item.target for symlinks?
- rename item.bsdflags to item.flags or item.fsflags?
N+1 archive / item
- Item.get_size: remove support for items with chunks, but without precomputed
size
2.0 or N+1 checksums
- DONE we could even consider removing libdeflate in 2.0. the only major user will be "borg transfer" and that will be a one-time per repo usage.
- DONE remove libdeflate again and use zlib.crc32 from stdlib, PUT2 format only uses crc32 for header data, not much data getting crc'ed
2.0 compression
- DONE borg transfer can remove the dirty type bytes hack for zlib, add cleaner dispatch / new handler
- DONE we need to keep all compression algorithms, so borg transfer does not need to recompress
- DONE compressor: reverse ObfuscateSize header_fmt byte order #6701
- DONE compression type bytes: include compression level / preset #6698
N+1 compression
- drop support (dispatching / handler) for the zlib dirty type bytes hack (ZLIB_legacy)
- we need to keep all other compression algorithms, because borg transfer did not recompress
2.0 upgrade
- DONE remove borg upgrade, doing upgrades from attic / old borg (they need to first upgrade to 1.2 and then use borg transfer)
N+1 archiver
- remove unneeded stuff from benchmark cpu
2.0 remote
- DONE dropped support for borg < 1.1.0 (tuple rpc data format, $LOG non-json log format, repo version check) borg.remote: remove legacy #7603
- DONE do not use 3 channels (stdin,stdout,stderr) for RPC, logging and progress infos. while ssh and similar methods can do that, e.g. a socket has only 2 channels. new remote and progress logging, cleanups #7607
- DONE implement socket in addition to ssh to connect to
borg serve. implement unix domain socket support #7615
2.0 cli
- DONE separate archive name from repo url (our regexes are way too complex), split repo and archive name into separate args? #948
- DONE drop scp syntax for the repo location remove scp syntax #6691
- DONE Should most CLI options silently override earlier instances of the same option? #6269
- more specific return code / rc / error codes of the borg process #6756
2.0 locking
- DONE implement borgstore based locking for borgstore based repos.
- DONE stale lock removal of old locks that did not get refreshed.
- DONE stale lock removal of locks of dead processes.
- DONE most commands now use a shared lock, except borg compact and borg check.
y2038 and requiring 64bit
- if we set SUPPORT_32BIT_PLATFORMS = False, the y2038 issue will be solved (AFAIK), but we require a 64bit platform then.
- not sure if we can already do that. a lot of platforms already dropped 32bit support, but for some this is still in the works (e.g. SBC like the raspberry pi).
- otoh, development of borg 2.0 will take a while, so there's a good chance all 32bit platforms are gone when it will be released. and even if not, borg 1.2 will still exist also.
- Good summary, but missing infos about Python: https://en.wikipedia.org/wiki/Year_2038_problem
stuff that is out of scope
as you see above, there is already a huge scope of what should be done.
to not grow the scope even further, some stuff shall not be done (now):
- no public key cryptography (neither by gpg nor by reinventing gpg for borg)
- no multithreading