from the libtorrent API documentation http://libtorrent.org/manual.htmlseed_choking_algorithm controls the seeding unchoke behavior. The available options are:
round_robin which round-robins the peers that are unchoked when seeding. This distributes the upload bandwidht uniformly and fairly. It minimizes the ability for a peer to download everything without redistributing it.
fastest_upload unchokes the peers we can send to the fastest. This might be a bit more reliable in utilizing all available capacity.
anti_leech prioritizes peers who have just started or are just about to finish the download. The intention is to force peers in the middle of the download to trade with each other.
Currently qBT uses the default algorithm of "round_robin", which means that for seeding to start the swarm size must be a minimum of three nodes, 1 seed 2 peers so that pieces can be served to alternate peers.
For seeding to start with a swarm of two (1 seed, 1 peer) the algorithm must be set at "fastest_upload" or a BEP 19 webseed must be defined in the meta data to operate as an "unchoked seed"
None of this matters if you are making your torrents available to multiple peers and three or more start to download but if only one other peer is "interested" the job WILL stall after one or two pieces have been completed. Also stalling will occur if the connected peer count drops to only one after the job completes, such as with overseeded jobs on 'private' trackers.
Proposal: To make the choking algorithm selectable, globally rather than for individual tasks to minimise the effect on the footprint.