Я советую для изучения Chrome/Chromium. Почему? Потому, что у него грамотно организованный код и есть design documents — описание архитектуры и устройства отдельных компонент. вот, смотрите:
www.chromium.org/developers/design-documents/. Также, там применяется много технических хитростей.
Если вам, к примеру, интересно узнать, как работает композитинг (и аппаратное ускорение рендеринга), вы просто читаете соответствующий диздок и смотрите упомянутые там классы.
Если вам вообще интересна не какая-то часть продукта, а общее устройство — ищите главный файл приложения и функцию main() и вперед… несколько дней, проведенных в изучении путей вызова функций помогут вам составить представление о работе ПО.
Естественно, по ходу разбирания в коде вам могут понадобиться мануалы, например заглядывать в MSDN для подробностей функий WinAPI, документацию внешних библиотек, возможно, еще что-то. Если речь о С++ (а в Хроме он используется), вам также полезно укрепить знания этого языка, пролистав Страуструпа и почитывая C++ FAQ (я не помню ссылки, найдите сами в Гугле, но любой уважающий себя С++ разработчик должен знать то, что там написано, так как С++ на редкость богат возможностями выстрелить себе в ногу).
Все мануалы и подробности — только на английском, если вы его не знаете, то вам остается только читать сам код и пытаться угадать. как он работает и за что отвечает.
Ок, допустим Хром вам неинтересен, вы хотите залезть в ядро Линукса. Опять же, гуглите диздоки и все, что на них похоже, например, во многих проектах это называется Hacker's manual/hackers reference — там обычно описывается общая структура проекта и какой модуль за что отвечает.
Говоря кратко, ядро Линукса состоит из отдельных подсистем, каждая из которых управляет набором таблиц и списков (таблица процессов, список открытых файлов, список страниц памяти). Изучать его проще всего, взяв системный вызов, например fopen() или kill() или fork() и посмотрев, какой код вызывается в ходе его выполнения. Обычно это проверки прав пользоателя, проверка состояния процеса, вызов хуков, и, наконец, самое главное — модификация каких-нибудь таблиц, например добавление сигнала в очередь процесса.
Естественно, предполагается знание читателем деталей языка Си типа указателей, структур, юний, списков, хеш-таблиц — без этого вряд ли можно что-то понять в коде ядра.
Но и как в случае с хромом, потратив определенное время на изучение кода и документации, понимание его устройства придет само собой.
Вот, например, сходу нагуглилось:
tldp.org/LDP/tlk/tlk.html (старый документ),
www.kernel.org/doc/htmldocs/kernel-hacking.html (не очень старый). Также, в дереве исходников ядра есть папка с говорящим названием documentation, также там разбросаны файлы readme.