If you want a full understanding you can start by studying some of these broader subjects like a Computer Engineering college curriculum would cover:
Operating Systems, Databases, Networking, Programming Design, Programming Languages, etc.
For the quick and dirty:
Linux and Java and find all the source code you can get your hands on!!!