What is the wordpress wp-includes folder for? That is, whats the fundamental architectural purpose of it, for example why isn’t it all in themes or an admin folder?
Can a plugin developer rely in it’s contents (e.g. jQuery) and for how long?
I would also like to know, who decides what goes in there and how does it get maintained as WordPress changes, any is all this documented somewhere as a policy doc?
wp-includes contains everything needed to run WordPress via the frontend ( and then some ). It is the territory of WordPress Core, and as the adage goes, never modify core under any circumstances.
wp-content may define plugins and themes, the API itself and the vast majority of the WordPress core sits in that folder. These are depended on by almost the entirety of WordPress. All your standard functions and their dependencies will be found in this folder.
This makes it a valuable resource for research and looking up things.
wp-admin may define additional items but it is not as vital to the running of the frontend
./wp-admin - Admin code
./wp-content - User-defined code and content
./wp-includes - Common files
As for how reliable the files are in that folder, you shouldn’t rely on the files in that folder. You should never need to include a file or path from wp-includes and if you attempt to or need to, then you have done something horribly wrong and need to stop and go back.
While the files in that folder may change without warning, this should be of no consequence, as the API contained is kept backwards compatible for a significant amount of time.
Outside of updates to WordPress,
wp-includes should never be modified and should ideally be read only.
Should you need to add a dependency to your code, rely on the versions in wp-includes rather than adding your own. e.g. don’t include a custom jQuery, use the one bundled with WordPress ( don’t de-register it and re-register it either ).
Modifications to wp-includes can cause security risks, performance degradation, broken plugins/themes, etc
Changes to the packages and libraries included are announced ahead of releases. Old dependencies no longer required (such as the old colour picker) are kept, but marked deprecated to prevent code breakage