[Что такое framework и runtime?](/questions/488378/%d0%a7%d1%82%d0%be-%d1%82%d0%b0%d0%ba%d0%be%d0%b5-framework-%d0%b8-runtime)
==============================================================================================================================

Нигде не нашел чёткого опрделения этми двумя понятиям.

Я понимаю фреймворк, как платформу, которая необходима для работы каких-либо приложений. Например, набор динамически линкуемых библиотек для нескольких приложений - уже фреймворк. Также под это определение подохдит и Java Runtime Environment (в том числе и JVM). Однако что такое рантайм? С одной стороны это всего лишь фаза выполнения программы. С другой стороны есть куча терминов, как runtime libraries, runtime system... Что вкладывает майкрософт в это понятие тоже неясно. Объясните, пожалуйста!

Между библиотекой и фреймворком разница небольшая, но принципиальна. Если Ваш код просто использует функции модуля, то этот модуль скорее всего библиотека. А вот если модуль заставляет Вас писать код так как он хочет и сам его вызывает, то это уже фреймворк. А вот собственно модуль - это набор файлов-исходников (иногда уже скомпилированных).

runtime - это часть кода, существует в выполнимом файле (либо в отдельных so/dll) и обеспечивает всякие "удобства". Например, узнать тип объекта или сделать те же виртуальные вызовы. Добавляется обычно компилятором и обычный пользователь может даже не знать о нем. Также словом runtime называют то время, когда программа выполняется. Что конкретно имеется ввиду - нужно сдедить за контекстом.

runtime libraries - это библиотеки, которые используются во время работы программы. Иногда библиотеки поставляются в двух видах - для разработки и для обычной работы (вторые часто оптимизированы и с них выброшено лишнее). Хороший пример - bpl файлы делфи. Для одного и того же компонента могут быть библиотеки, которые содержат всякие инструметы для IDE, а есть которые только для работоспособности кода.

JRE - это не фреймворк, это runtime библиотека. Хотя с другой стороны это фреймворк для байткода. Но так как на байткоде пищут только особые извращенцы, то обычному программисту это не фреймфорк. А вот вся java - это один сплошной фреймворк:)



Хотелось бы немного дополнить данный ранее ответ.

1. **Framework vs Library**. И то, и то - набор каких-то полезностей и функциональностей, но принципиальная разница в [Inversion Of Control](https://en.wikipedia.org/wiki/Inversion_of_control).
Поясню: представь себе консольное приложение, в которым ты
спрашиваешь у пользователя какие-то данные, а затем
проводишь вычисления и отдаешь результат. В ходе вычислений ты
можешь использовать, например, библиотеку математических функций, но
ты **САМ** задаешь ход и структуру программы, а функциями из библиотеки просто пользуешься по мере необходимости. Во фреймворках же происходит инверсия контроля, т.е. 
ход программы определяет **ФРЕЙМВОРК**, а тебе надо как бы заполнить 
определенные пустые места своим кодом (например, написать контроллер в MVC-
фреймворках).
2. **Runtime**. Под "[runtime](https://en.wikipedia.org/wiki/Runtime_system)" скорее всего ты имеешь в виду вспомогательные
программы, которые используются при исполнении основных программ через 
определенное API. Например, JS-движок браузера использует event loop и через
разные API (например, XMLHttpRequest) получает дополнительные возможности, которые к самому JS не относятся. Эти API по сути и есть runtime, которые расширяют возможности и помогают выполнить код скрипта. При этом со стороны, взаимодействуя с API, может показаться, что эти возможности как бы принадлежат самому JS или же являются вызовами каких-то библиотечных функций, хотя на самом деле они могут быть реализованы вообще по-другому и к JS отношение не имеют.