Magento has three different codepools:
This core pool folder stores all the code that makes Magento so powerful, flexible and lovely. The chief rule of Magento development is that you should never make any changes in the core pool.
This folder belongs entirely to community developers. This is the right place for hundreds of 3rd party extensions, both free and paid, that can be found at MagentoConnect. So basically, if you have installed any extension, it must be in app/code/community/ only.
If you have your own Magento-based store and want to make everything by yourself or you are a Magento developer and have a purpose to change the logic somehow, local pool is the place where everything should be done. If you want to override Magento extensions, blocks or methods, copy the necessary folders from the Core pool and do whatever you are inclined to do. Apply the same rule for custom extensions that are created specifically for the website – all code should be in local pool.
How does the framework interact with the various codepools?
To identify the proccess let’s take a look at app/Mage.php
* Set include path
$paths = BP . DS . ‘app’ . DS . ‘code’ . DS . ‘local’;
$paths = BP . DS . ‘app’ . DS . ‘code’ . DS . ‘community’;
$paths = BP . DS . ‘app’ . DS . ‘code’ . DS . ‘core’;
$paths = BP . DS . ‘lib’;
$appPath = implode(PS, $paths);
set_include_path($appPath . PS . Mage::registry(‘original_include_path’));
This code snippet illustrates the order Magento is using to include paths – firstly it includes Local code pool, than community and after that – core, which allow developers to override classes without changing core files.