I did not get your "the circumstances of the transaction" part. Is it the amount you are referring to ? Can the same amount of transaction be sometimes chargeable and sometimes free ? If I send u a uBTC from my Bitcoin-Qt wallet installed on my computer then can that be chargeable anyway ?
Your peers are not "required" to relay your transactions. Each peer is welcome to set their own criteria for which transactions they will relay to the rest of the network. Many peers will be running the "reference client" Bitcoin-Qt (or bitcoind). In that case, they will refuse to relay transactions that appear "spammy" if they don't include a reasonable fee. The fee requirements that most of your decentralized peers have voluntarily chosen (by way of choosing a wallet/client that imposes the requirement) are as follows:
If a transaction has any ouput less than 0.01 BTC, then a fee will be required.
If a transaction is larger than 10 kilobytes (typically because it includes dozens of miniscule inputs from places like "Free Bitcoin" sites), then a fee will be required.
If a transaction has a priority lower than 57,600,600, then a fee will be required.
Now even if you can convince enough peers to relay a free transaction that appears "spammy"...
Miners are not "required" to confirm your transaction. Each miner (or pool) is welcome to set their own criteria for which transactions they will include in the blocks they create. You are able to provide an incentive for miners (or pools) to include your transaction by way of a transaction fee. If the transaction appears "spammy", you may find that without a fee as described above, it will take a VERY long time for a miner (or pool) to include your transaction (if ever).
As you can see, the entire system is "voluntary", and "decentralized", but because of certain rules that most peers, miners, and pools have independently chosen to impose (to protect the network from a particular form of "denial of service" attack, it can become very difficult to use without agreeing to pay a fee in certain circumstances. Most wallets protect you from accidentally creating a transaction that your peers won't relay and that miners won't confirm, by "forcing" you to pay the fee that the rest of the network is enforcing.
In general I believe that the fee that most wallets enforce is somewhere between 0.0001 BTC and 0.001 BTC. However, if your transaction becomes very large (in terms of bytes, not bitcoin value) due to a huge number of extremely small inputs, that fee is multiplied by the number of kilobytes in your transaction. As such you can end up with significantly larger fees.