Here's my 2 cents.
Let's step back a little and start from the basics. As you may know, a node is a computer participating in the blockchain network, and there is an application, known as a client, running in it.
This is a conceptual diagram of a Substrate client.
The runtime, labeled as Wasm Runtime, is a piece of the Substrate client. There are other components besides the runtime that comprise the Substrate client.
From the docs:
The runtime of a blockchain is the business logic that defines its behaviour.
This business logic is organized in domain-specific modules. Broadly speaking, we refer to these modules as FRAME modules (pallets). So, we could say that a set of pallets constitute a runtime.
In the Substrate Node Template repository, you could check how the runtime is constructed based on a set of pallets. You could navigate to runtime/src/lib.rs
and find the construct_runtime!
macro.
You will see the following:
// Create the runtime by composing the FRAME pallets that were previously configured.
construct_runtime!(
pub enum Runtime where
Block = Block,
NodeBlock = opaque::Block,
UncheckedExtrinsic = UncheckedExtrinsic
{
System: frame_system,
RandomnessCollectiveFlip: pallet_randomness_collective_flip,
Timestamp: pallet_timestamp,
Aura: pallet_aura,
Grandpa: pallet_grandpa,
Balances: pallet_balances,
TransactionPayment: pallet_transaction_payment,
Sudo: pallet_sudo,
// Include the custom logic from the pallet-template in the runtime.
TemplateModule: pallet_template,
}
);
All the pallets except TemplateModule
are FRAME modules provided by Substrate.
TemplateModule
is a custom pallet written by a developer.
Back to your questions, in the link you shared at the System crate section says:
All other pallets depend on the System crate (pallet_system) as the basis of your Substrate runtime.
The System crate defines all the core types for the Substrate runtime.
Based on that, the System pallet, which is part of the "SYSTEM MODULE" block in the diagram, is a must.