This is a simple contribution that will allow you to determine if shipping is free based on the total weight of the items in the cart. In my case I wanted gift cards to be shipped free, so I gave them a product weight of 0 and set this contribution to allow free shipping only if the total weight of the cart equaled 0 lbs / kgs.
All it does is switch the built in free shipping option from "order total" to "cart weight."
Estimated time for install is five minutes!
Legend: 
Download

Report
If you would like zero / no weight shipping but still collect customer's address, the change is very simple:
Add the following lines:
} else if($cart->show_weight() == 0) {
$free_shipping = true;
above this line (somewhere about 97):
} else {
$free_shipping = false;
}
One instance where some of the other contribs won't work is if the customer purchases a free shipping item and a non-free item, like a class on Flash and a new mouse. The mouse takes shipping, the class wouldn't.
in /includes/classes/shopping_cart.php line 218 (or so).
change to:
$products_weight = 0;
if($product['products_weight'] <= 0){
$products_weight = 0;
}else{
$products_weight = $product['products_weight'];
}
This change limits the product weight if it's 0 and allows other products to process normally if they have a weight. You can then change checkout_shipping.php to remove the table in line 259+.
Change it to something like:
<?php
if($order->info['total'] > 0){
?>
<tr><td>.... (this is where the shipping table goes)...</td></tr>
<?php } ?>
The above change removes the shipping table if the order total weight is 0 or less. This change may not apply for the tare weight because that weight is calculated in the final shipping weight. I recommend a tare weight of 0 for this to work properly.
This is an updated version that fixes some problems with not advancing through the payment car. It also removes the logic from the existing "Free Shipping based on Order Total" that is built in to osCommerce. So you can now use this contribution and that together.
This is the full package, and most instances you should be able to overwrite your existing files with this one.
Installation time should only take 10 minutes max!
This is an easy way to get the same result without
the need to switch the built in free shipping option from "order total" to "cart weight
so you can still use order total shipping free for minimum amount with no problem.
--------------------------------------------------
Backup your.....
catalog/checkout_shipping.php
then open the file and replace line no.52
if ($order->content_type == 'virtual') {
....with this....
//if ($order->content_type == 'virtual') {
if (($order->content_type == 'virtual') || ($cart->show_weight() == 0) ) {
--------------------------------------------------
Done!
DEEP SILVER.
This is a simple contribution that will allow you to determine if shipping is free based on the total weight of the items in the cart. In my case I wanted gift cards to be shipped free, so I gave them a product weight of 0 and set this contribution to allow free shipping only if the total weight of the cart equaled 0 lbs / kgs.
All it does is switch the built in free shipping option from "order total" to "cart weight."
Estimated time for install is five minutes!