A single annual payment is a larger liability (for both parties) than the installment plan.
The way they show the prices is problematic. If 12 payments are expected, it should be reflected anywhere that price is shown. But I think it's fine if they are willing to offer a discount for agreeing to make 12 payments vs 1 payment.
Is this any different from AWS offering reserved instances? The pricing structure is the same: you pay by the month but commit to a year. Reserved instances seem perfectly fair to me: what's different here?
Context matters. Almost no pure software product has a cancellation fee. It's always a yearly cost or monthly where you can cancel anytime.
Some things like apartment leases are not only in a different context, but it's done for a clear reason. Reserved instances on AWS I'm assuming has a similar purpose but it's also in a different context and it's hopefully made very clear to the user.
Pay monthly for monthly plans, and pay annually once for annual plans.