SDCC has the best OSS 8051 compiler. It is buggy as hell, but it is free. Sometimes that is good enough.