Gas is a unit used to measure the computational work utilized in executing a transaction or smart contract on a decentralized network. The price of using a decentralized service, say transferring ownership of a Cryptokitty, reflects both the ‘gas’ costs of executing the contracts transferring ownership of that asset and the price users are willing to pay for such a service.
Gas price represents the amount a user is offering to pay for a discrete quantity of expended computational power (e.g. like paying for two hours of labor.) A gas limit specifies the total amount a user is willing to spend on computational labor—important in cases where bugs in code would have computational power used indefinitely. Users pay for expended computational power regardless of whether it sufficient to complete the computation executed—as a deck is unlikely to be fully constructed with two hours of labor, some transactions can fail due to too low a gas limit for the task’s complexity. In this respect, the onus is notably on the ones designing or using a smart contract to set appropriate gas prices and limits, not on those providing the computational resources to deliver the service paid for.