Release 80

This release implements a licensing model change. In a gist, we are switching from the use-based licensing to the feature-based model.

* This change has been in works for a very long time, being first
announced almost 3 years ago in August 2016. I genuinely hope
it doesn't come as a surprise to anyone's who's been following
bvckup2 development and updates.

New license types

Previously, the type of required license was determined by whether the software was to be used on one's home computer for processing personal data or in any other setup.

With this release, the license determines the feature set the program:

⦁ Pro licenses are all inclusive and cover all features, both present
and planned.

⦁ Basic licenses are meant for a simpler use and include a subset
of Pro features. It is now considered complete and it will not be
expanded further.

Additionally, the Server edition of a Pro license is now be required for Windows Server installations.

Basic licenses will be limited to forum-based support and minor updates (patch releases) only. Pro licenses will come with a year of Pro support that includes email-based support and access to major updates (upgrades).

After a year, it'll be possible to extend Pro support for another year for a fee of 20% of the original license cost. This is optional. Should it be not extended, the installation will no longer be eligible for _upgrading_ and its tech support will downgrade to the public forum option.

This is essentially a "rolling" form of a conventional upgrade model when a new major version is released every year and existing users have a choice of either staying with the last year release or upgrading at a substantial discount.

⦁ Run-on-device-arrival scheduling now applies to local devices only -
as opposed to being also triggered by a network share becoming
accessible.

⦁ Exporting configuration now also picks up email alert templates.

⦁ Configuration self-backup now covers additional config files.

⦁ Resolved an issue with reporting reparse points that are folders -
that is, when running into a reparse paint _of an unknown type_
the program will now correctly report the event both if it is a file
reparse point and if it's of a directory kind.

⦁ Resolved a cosmetic issue with the Welcome window - some text was
clipped, and now it's not.

⦁ Resolved an issue with logging email alerting failures - an exotic issue
triggered when the dispatch of a "missed a backup run" alert ends
_precisely_ when the job is being launched. This literally required a
microsecond precision in timing, but apparently some installation
managed to achieve that.

⦁ Reworked email alerts module to double-check message formatting -
this has to do with a report of qmail refusing an email alert because it
(allegedly) contained a lone LF character as a line terminator [1] instead
of CRLF. Looking at the code on our side there's no way this could've
had happened, it always sends CRLF. But just in case the alerting
module now explicitly re-checks that all lines are CRLF terminated
immediately before sending them to the remote end.

⦁ Switched to using new code signing certificate - due to changing the
name of the company from Pipemetrics to IO Bureau.

Do note that because of this change all existing installations except
for 80.2 will receive an update packaged in a special way. This is
because versions 80.1 and older expect the update package to carry
a signature of "Pipemetrics SA", so we use some acrobatics to ensure
that's the case (even though we no longer can sign new releases with
that certificate). I'll post more details in the blog shortly as it's an
interesting topic if a bit technical.

⦁ Resolved an issue with auto-launching the UI in service mode - with
older installations that were switched to the service mode a while ago
(as in "several years"), R80.2 will erroneously assume that it needs to
run in a desktop mode IF it is set to auto-start on Windows logon.

The backup service would still run and execute all the backups, but
the UI wouldn't want to connect to it, insisting on running as a full
app => it will show up unlicensed and with an empty list of jobs.

The problem is benign and restarting the UI would re-attached it to
the service, but the symptoms were scary.

⦁ Resolved a logging issue with trial expiring at the exact same moment
one of the jobs starts a scheduled run.

⦁ Added support for opportunistic backup of offline files - this is related to the OneDrive folder backups. It is now possible to temporarily suppress processing of files that are offline (i.e. not cached locally).

⦁ Added ReFS to the list of recognized file systems - this basically means that bvckup2 now knows the timestamp resolution and the maximum file size of ReFS, which is used in cases when it cannot determine these through active testing.

⦁ Enabled support for TLS 1.1 and 1.2 in the email module - this should resolve issues with email alerts mysteriously failing with "failed to secure the connection" errors, when they were sent to mail servers refusing older protocol revisions AND just flat out dropping connections instead of reporting their issues with the protocol revision.

⦁ Humanized error reporting for offline cloud-stored files - a handful of errors relating to trying to read offline file is now also explained in plain English.

⦁ Fixed a quirk with scheduling of periodic jobs - this is a good one. Just like the Oracle from The Matrix, it's been with us from the very beginning.

Basically, if a job was set to run at 12:00, being run manually at 11:59 and then cancelled at 12:01, then it will be re-run immediately after that. This was because the time of the next run was computed relative to the _start_ of the previous attempt... whereby it should've been the latest of the last-attempt start and the last-good-run finish.

⦁ Resolved an issue with the SSD detection logic - we can all thank HTS541010B7E610 for this, because for whatever reason this HDD reports that it supports TRIM, which it clearly shouldn't since is an SSD-specific operation. Well done, WD.

⦁ Fixed a scanner issue when running into a duplicate file/folder. More specifically, it would prematurely stop the scan of a folder if it managed to run into an item with a duplicate name, e.g. "aBc.txt" after already seeing "abc.txt".

This was the bug in the scanning logic. It is fixed now by, obviously, *not* stopping the scan and reporting the dupe as an error.

The context here is that Windows native NTFS is case-insensitive. It's preserves the case, but won't allow creating two files with names that differ only in their case.

However Linux re-implementation of NTFS is case-Sensitive, which is the norm in the Unix world. It is perfectly possible to create files that differ only in case... not that it actually gets used much, except by an accident.

So using an NTFS volume both in Windows and Linux may result in files that break Windows' case-insensitivity restriction.

⦁ Fixed an issue introduced in 80.6 whereby the meaning of "set valid file data" option in ultra copier's configuration was reversed, so 80.6 ended up always trying to set the data. The issue was mostly cosmetic as this operation is optional, but it still counted as a backup error if it failed.

If you are seeing errors like the one in [1] and you are on 80.6, then do a manual update to 80.6.1 using https://bvckup2.com/update. Otherwise updating is entirely optional.

⦁ Revised the logic used to detect out-of-sync snapshots - that is, when the program runs into an error that can only mean that its cached file index of destination is invalid, e.g. a folder that should be empty is not empty, a file that shouldn't exist is already there, etc. When this happens, the backup is cancelled and immediately re-run, but with destination re-scanned afresh. This release merely tightens up the list of exact errors and conditions that are used to detect these cases.

⦁ Fixed an issue with the UI startup in service mode - this has to do with starting the UI under a _different_ user account for the _second_ time. More specifically - install the program, switch to the service mode, login under a different desktop user (or alternatively nuke the UI-side config folder), start the UI, exit it, start it again. At this point it used to start in the desktop mode instead of connecting to the service. No more of that now.

⦁ Fixed a smaller issue with the 2-stage file copier. Two-stage copying is used when _updating_ files and the delta copying is off. The file will first be copied into a temp file, which will then renamed into its properly name backup copy. The issue was with detecting if the source file was actively changing during the copy and issuing a warning to that effect. More specifically, this warning was never issued and now it is.

⦁ Revised file attribute handling logic a bit - starting with this release, if the program sees a file system volume that supports the Archive attribute ONLY, then it will act as if this attribute is NOT supported either. This is a workaround for QNAP devices that will report Archive attributes set on files, but refuse to clear them.

⦁ Fixed an issue with destination snapshot management. It has to do with handling of files that get renamed _and_ updated between the backup runs when the backup is aborted between these two actions.

The problem was file's current timestamp was recorded in the snapshot after the rename and then again after the update. So the rename went through, but the update didn't, the file ended up looking like is was still in sync with the original.

Kudos to Aram for not only managing to trigger this issue, but also for noticing and reporting it.

When the archiving of _modified_ files is enabled, the program will
now log timestamps and sizes of source and backup copies so that
it'd be possible to understand why the file was deemed modified.

This is the exact same information that is already logged for files
being updated with regular (non-archiving) backups.

⦁ Added an option for not retaining downloaded updates.

When the program is updated using built-in Check For Updates
function, all downloaded update packages are retained in its
configuration directory. With this release it is now possible to tell
the program to dispose of the updates once they are installed by
by adding the following override to the engine settings:

updates.conf.keep_downloads 0

⦁ Cleaned up and re-balanced the logo a bit. The B in "Bvckup 2" was
too heavy and "2" was off its proper pixel boundary.

⦁ Fixed an issue with retrying the backup of new files - that is, if the
backup of a brand new file failed on the first try, but succeeded on
second, the program would panic (due to a wrong self-consistency
check).

⦁ Added new adaptive %-age display for longer file copies - the UI will now automatically increase the number of decimals in the completed %-age value if the copying is going slow. The goal is to ensure that we _always_ show progress regardless of how slow it goes, but without it spinning _too_ fast -

⦁ Increased refresh rate of the progress reporting to 20 Hz - a smaller change that bumps up the number of progress bar updates from 4 to 20 times a second. Make the animation look a bit nicer and smoother.

This has to do with a bizarre case when a text in email alerts had every line split into two parts with a split point steadily crawling from the back of the line to its beginning. First line will have only one symbol clipped, second - two, etc.

The person who reported this didn't manage to find the exact cause, but they reported a workaround - adding a space at the end of each line. It's a fix transparent to normal use, so this is what the program will do from now on. It is however possible to switch this off if needed.

It groups together VSS snapshot disposal, device/media ejection, email alert dispatch and post-backup command details. Just to make things a bit more organized compared to how it was before.

Fixes

⦁ Fixed an issue with copying AD (alternate data) streams - this was introduced in 80.9 with addition of the new time/speed estimator. It basically didn't know AD streams existed so it panicked when it started to get progress updates on them.

⦁ Fixed handling of running out of disk space in the planner - this has to do with the swap file used by the planning module breaking due to running out of disk space. There was one part in the planning code that assumed that retrieving certain data from the swapped storage always succeeded... whereby it did not, not always. Fixed. The backup is still aborted, of course, but now in a far more classy fashion.

⦁ Fixed handling of certain mid-file write errors - another issue rooted in the new estimator. Mid-file write errors may, under certain circumstances, cause the copying progress to jump back. The estimator quite correctly assumed that this shouldn't be happening, so the copying code has been hammered in place to conform. The progress now always goes forward.

⦁ Several cosmetic fixes in the logs and in the UI. There was one place where it could log "1 bytes", the tabbing order on More Settings page was wrong, etc.

⦁ Fixed an issue with repeated re-copying of unchanged security attributes. The issue was introduced in 80.10 and it caused DACL attribute of a file to be recopied on every run even if it remained unchanged. DACL cloning is off by default, so it only showed up in setups with the cloning of security attributed was explicitly enabled.

More specifically, in a presence of "alerts.email.cc" override, the CC list would grow by a copy of that override value on every program's restart. This was because the program didn't check for duplicates when initializing a list of CC emails. While this was actually an expected behavior, it wasn't a very good one. So from now on any duplicates are discarded.

This has to do with the earliest Pro licenses now entering their Pro Support (optional) renewal phase. To that end there's now a web page that explains all the details, the accompanying Pro Support renewal machinery on the backend and several improvements to the process on the program's side.