Co to jest środowisko uruchomieniowe?
Środowisko uruchomieniowe (runtime) to oprogramowanie, którego program potrzebuje wokół siebie w trakcie działania: silnik wykonujący jego kod, biblioteki standardowe, które wywołuje, i usługi zarządzające pamięcią, błędami i dostępem do systemu operacyjnego. Przykładami są JVM, Node.js i CPython.
Aktualizacja: 24 września 2026
Uruchom console.log(typeof process) w Node.js, a wyświetli się object. Wklej tę samą linię do konsoli Chrome, a wyświetli się undefined. Język w obu miejscach to ten sam JavaScript, ale program działa w dwóch różnych środowiskach uruchomieniowych, a każde daje mu inne narzędzia.
console.log(typeof process); // "object" in Node.js, "undefined" in a browser
console.log(typeof document); // "undefined" in Node.js, "object" in a browser
Co zapewnia środowisko uruchomieniowe
Twój kod tylko opisuje, co zrobić. Gdy się wykonuje, opiera się na warstwie oprogramowania, która była zainstalowana, zanim powstała choćby jedna linia twojego kodu. Ta warstwa zwykle składa się z pięciu części:
- Silnik wykonawczy. Coś musi wykonać kod: interpreter, maszyna wirtualna albo kompilator just-in-time. CPython, wirtualna maszyna Javy (JVM) i V8 to silniki wykonawcze.
- Biblioteka standardowa. Gotowe funkcje do obsługi tekstu, matematyki, dat, plików i sieci, takie jak moduł
jsonw Pythonie albo pakietjava.utilw Javie. - Zarządzanie pamięcią. Środowisko przydziela pamięć dla twoich obiektów, a w Pythonie, Javie i JavaScripcie zwalnia ją z powrotem za pomocą garbage collectora, gdy nic już z niej nie korzysta.
- Obsługa błędów. Gdy coś pójdzie nie tak, środowisko zatrzymuje program w kontrolowany sposób i zgłasza, gdzie to się stało, w postaci tracebacku albo stack trace.
- Dostęp do systemu operacyjnego. Odczyt plików, otwieranie połączeń sieciowych, odczyt zmiennych środowiskowych i argumentów wiersza poleceń przechodzą przez środowisko uruchomieniowe, które prosi o to system operacyjny w imieniu twojego programu.
Możesz zapytać środowisko Pythona o nie samo:
Odpowiedzi zależą od miejsca, w którym działa kod. Na serwerze z Linuksem platform.system() zwraca 'Linux', na Macu 'Darwin', a w Windowsie 'Windows'. Limit rekurencji (domyślnie 1000 w CPythonie) to reguła ustalona przez środowisko uruchomieniowe, a nie przez język Python, a dziesiątki modułów załadowanych przed twoją pierwszą linią to środowisko, które się przygotowuje.
Java: JDK, JRE i JVM
Java sprawia, że warstwy są widoczne, bo każda ma własną nazwę:
| Nazwa | Rozwinięcie | Co zawiera | Kto jej potrzebuje |
|---|---|---|---|
| JVM | Java Virtual Machine | Silnik, który wykonuje kod bajtowy (pliki .class) i zarządza pamięcią | Część obu poniższych |
| JRE | Java Runtime Environment | JVM plus standardowe biblioteki klas | Osoby, które tylko uruchamiają programy w Javie |
| JDK | Java Development Kit | JRE plus narzędzia programistyczne: javac, jar, javadoc, jdb | Osoby, które piszą programy w Javie |
Przepływ wygląda tak: javac Main.java (narzędzie z JDK, czyli kompilator) zamienia kod źródłowy na Main.class, a java Main uruchamia JVM, która ładuje klasę i wykonuje ją z bibliotekami środowiska uruchomieniowego. JVM to powód, dla którego jeden plik .class działa w Windowsie, macOS i Linuksie: każdy system operacyjny ma własną JVM, a wszystkie rozumieją ten sam kod bajtowy.
Od Javy 11 Oracle dostarcza tylko JDK, bez osobnego JRE do pobrania. Niektóre dystrybucje, takie jak Eclipse Temurin, nadal publikują pakiet JRE. Jeśli uczysz się Javy, zainstaluj JDK: zawiera wszystko, co JRE. Przewodnik instalacja Javy prowadzi przez ten proces.
JavaScript: przeglądarka i Node.js
JavaScript zaprojektowano do działania wewnątrz stron internetowych, więc jego pierwszym środowiskiem uruchomieniowym była przeglądarka. Środowisko przeglądarki daje twojemu kodowi document strony, window, timery i fetch do zapytań sieciowych, a celowo blokuje bezpośredni dostęp do twoich plików.
Node.js wyjmuje silnik V8 firmy Google z przeglądarki i opakowuje go w inne środowisko: nie ma document, ale są moduły takie jak fs do plików, http do serwerów i obiekt process do zmiennych środowiskowych i argumentów. Deno i Bun to nowsze środowiska uruchomieniowe dla tego samego języka z własnymi narzędziami. Wszystkie wykonują ten sam rdzeń JavaScriptu; różnica polega na tym, co go otacza. Strony o środowisku Node.js i pętli zdarzeń idą dalej.
Python: CPython i inne
Gdy ktoś mówi "zainstaluj Pythona", ma na myśli instalację środowiska uruchomieniowego: interpretera CPython, biblioteki standardowej i pip do dodawania pakietów. Dla tego samego języka istnieją inne środowiska. PyPy dodaje kompilator JIT dla szybkości, a MicroPython jest na tyle mały, że działa na mikrokontrolerach.
Środowisko wirtualne (python3 -m venv .venv) nie jest nowym środowiskiem uruchomieniowym. Wskazuje na istniejący interpreter i daje jednemu projektowi własny zestaw zainstalowanych pakietów, dzięki czemu dwa projekty mogą używać różnych wersji tej samej biblioteki. Zobacz środowiska wirtualne.
Czas kompilacji i czas wykonania
"Runtime" oznacza też moment: okres, w którym program działa, w przeciwieństwie do czasu kompilacji, gdy kod źródłowy jest tłumaczony. Pomyłka odrzucona przez kompilator to błąd kompilacji; taka, która pojawia się dopiero w trakcie działania programu, na przykład dzielenie przez zero, to błąd wykonania. Środowisko uruchomieniowe to oprogramowanie obecne w tym drugim okresie.
Nawet C, które kompiluje się prosto do kodu maszynowego, ma małe środowisko uruchomieniowe. Program w C zaczyna się w kodzie startowym dostarczonym przez zestaw narzędzi kompilatora, a funkcje takie jak printf i malloc pochodzą ze standardowej biblioteki C (glibc w większości systemów Linux, Universal C Runtime w Windowsie). Po prostu nie ma tu maszyny wirtualnej ani garbage collectora.
Częste nieporozumienia
- "Środowisko uruchomieniowe to system operacyjny." System operacyjny zarządza sprzętem dla każdego programu. Środowisko uruchomieniowe to warstwa jednego programu działająca na nim. JVM sama jest programem, który uruchamia Windows, macOS albo Linux; nie zastępuje ich.
- "Node.js to język albo framework." Node.js to środowisko uruchomieniowe JavaScriptu. Frameworki takie jak Express to biblioteki, które działają wewnątrz niego.
- "Instalacja IDE instaluje środowisko uruchomieniowe." VS Code nie zawiera Pythona ani Javy. Edytor i środowisko uruchomieniowe instaluje się osobno, choć niektóre IDE, takie jak IntelliJ IDEA, potrafią pobrać JDK za ciebie.
- "Ten sam język, to samo zachowanie wszędzie." Funkcje, które zapewnia środowisko, takie jak dostęp do plików, domyślne limity i dostępne moduły, mogą się różnić. Kod, który działa w Node.js, może z tego właśnie powodu nie działać w przeglądarce.
Co dalej
Silnikiem wykonawczym w większości środowisk jest interpreter, a jego strona porównuje go też z kompilatorem. Pod każdym środowiskiem uruchomieniowym leży system operacyjny. Żeby poćwiczyć w środowisku, którego jeszcze nie znasz, zacznij kurs Java albo kurs JavaScript.
Najczęściej zadawane pytania
Jaki jest przykład środowiska uruchomieniowego?
Czy Node.js to środowisko uruchomieniowe?
Co właściwie znaczy runtime?
Instalować JRE czy JDK?
javac i wszystko, co jest w JRE. Samo JRE tylko uruchamia istniejące programy w Javie. Od Javy 11 Oracle dystrybuuje tylko JDK, więc dla obecnych wersji Javy JDK jest normalnym wyborem.Co oznaczają skróty JDK, JRE i JVM?
javac.