The way to do it without a plugin, is to add a new rate, label it “Free Shipping”, and set the conditions to only apply when the min and max are both $0.
Any other paid shipping options will still display – and be selectable by the customer! – but obviously they can just pick free shipping and there won’t be a charge.
So to give a “free” item to someone, make a dollar value discount code of the price of the item, so that the cost is zero, and then this free shipping rate will appear. Note: if you are dealing with multiple currencies, sometimes the conversion means that your dollar value discount code makes it not quite $0. You’ll need to experiment and set a discount $ value appropriately.