библиотека это набор функций и/или классов. не обязательно знать исходный код библиотеки но нужно знать ее интерфейс. например mysqli (расширение) это фактически библиотека функций. вы не знаете что там и на каком языке написано, как работает. но вы знаете что mysqli_connect открывает соединение с БД, mysqli_query выполняет запрос и так далее и, используете этот функционал в своем проекте. модуль это некоторый алгоритм, который работает в каком-то окружении (cms/cmf/"движок") и выполняет какой-то кусок возложенных на него обязанностей. фактически "движок" для модуля превращается в одну большую библиотеку. можно написать 100 файлов с одинаковыми кусками кода и небольшим отличием, а можно все одинаковое вынести в общий код (cms/cmf/"движок"), а уникальный алгоритм останется содержимым модуля. примерно так.
http://ru.wikipedia.org/wiki/Модуль ТУт написано так: Код (Text): Модуль (программирование) — функционально законченный фрагмент программы, оформленный в виде отдельного файла с исходным кодом или поименованной непрерывной её части. Получается например файл index.php - это модуль согласно википедии и одновременно и скрипт согласно ПХП и может быть одновременно и библиотекой(если в нем написать кучу функций)?
любой файл с содержимым php это скрипт, интерпретируемый пхп-машиной. что в вашем примере делает индекс пхп? если через уйму эхо выводит какую-то фигню типа хеллоу ворлд то это скрипт. если подключает точку входа в "движок" и строит страницу - это модуль [стартовой страницы]. если это точка входа в "движок" то он загружает, объявляет и инициализирует объекты. если это библиотека то она не должна содержать другого кода кроме определения классов/функций/констант/переменных так как не имеет смысла ради "стрима" компилировать уйму кода. но есть исключения - стенделоны, эмбедеты и тому подобное - файл содержит некоторый модуль и определение всех классов/функций/констант/переменных для своей работы. подобный файл применим только для самостоятельного исполнения ибо попытка его проинклюдить приведет к выполнению содержащегося в нем "стрима". при этом поскольку он несет все в себе то он не зависит от других файлов проекта.
mysql это система управления базами данных - субд. mysql которое расширение для пхп это библиотека. она содержит функции которые вы используете в своем коде. но сама она написана на C, а не на пхп. другой вам пример - PECL - библиотека расширений пхп. там тоже библиотеки выкладываются. только все они на пхп написаны и их можно не только процедурно использовать, но и без труда расширять.
модуль - это набор функций, библиотека - это набор модулей? любая библиотека содержит модули - подключаемые файлы в эту библиотеку в обязательном порядке?
нет же... вот есть модуль новостей для какого-нибудь друпала. это просто скрипт. он и сам бы мог подключаться к базе и заполнять шаблон. но он использует функциональные возможности друпала. для него друпал это библиотека. без друпала - этот модуль просто набор неясных инструкций. набор модулей это несколько файлов. набор функций это библиотека.
Друпа - это библиотека, да. Фреймворк даже. В Друпале есть модуль новостей. Он может использовать стороннюю библиотеку. Библиотека может быть разбита на модули... Модуль это абстрактное понятие. Совокупность методов, объединенная по некому признаку. Это субъективный критерий. не парьте себе голову =)