> Return 0 is implied under the C99 standard so some people ommit it
As you say, it's good practice to say what you mean.

IMO, the standards committees made main() special in this way (no other int returning function implies return 0) as a sop to all the void main programmers to enable them to get their programs up to standard by only changing one word.

I also find it ironic that for the past 20 years the standards committees have been going out of their way to remove implicit behaviour, and now they're adding some other implicit behaviour.

> Maybe ommitting the return 0; reduces program size and speeds up the execution of the program
Well the only thing I see being saved is 10 characters of source code.
The performance "gain" of omitting one instruction which happens only once in the life of a program is truly astonishing compared to the risk of undefined behaviour, and all the work the program has to do to get to that point.

> If I started a program with main() and left out the return 0; it'll work okay right?
Only if you're sure of your environment.
Personally, I go with a style which works everywhere regardless of compiler or standards committee fudges and say that main returns int, and there is an explicit return 0; at the end. Works every time, and does exactly what it says on the tin.

Then I can concentrate on the vastness of what the program is actually all about rather than worrying about some minor bit of triviality which can only cause grief by trying to second-guess what the compiler may or may not allow.