Free would definitely be better, but requires solving other problems in lockstep. E.g. homeless people using the busses as a place to exist/stay warm. It disrupts the bus as a function.
A small (deliberately) token fee gets the best compromise. It's akin to charging 10p for a plastic bag. For most people 10p isn't enough to be problematic, in the grand scheme of things. It does massively reduce frivolous usage.
I would prefer pushing it down to £1 return, or even lower, but £2/trip is still better than the current option.
Oh, and just to clarify I also definitely believe we should be using taxes to give homeless etc somewhere better to exist. The busses/trains/underground are not the place for that to happen.