user4334: Do I need to keep all blocks, from block 0 up to the current one, when running Bitcoin Core, either as a full node or not? Or can I just keep the more recent blocks to save space?

user4334: This is called pruning.
From here:

Since Bitcoin-Core 0.11.0 you can prune (trim) the blockchain in
  Bitcoin-Qt. But not from the UI. You need to add -prune=550 to your
  bitcoin.conf file and restart Bitcoin-Qt.
Explanation: -prune=<target in MiB> will tell bitcoin-core to remove blocks which are older than oldest block that can be kept with
  a chainsize (sum of block-sizes) of <target> (min. 550MiB as example
  above shows). A minimum of 550MiB ensures to keep at least 288 blocks
  (~2 days). 
  (simple explanation not including undo-data)
Restriction: -prune does disable all wallet functions in version 0.11 (will work with a wallet in version 0.12).

Obviously, as a full node you can't serve historical blocks you don't have, so you're more like a P2P leecher.

user5406: Full nodes keep all blocks by default, but this is not necessary to achieve full node security. Full nodes validate the complete blockchain and enforce all consensus rules regardless of whether a full history is kept.
Keeping all blocks is a service to the network, as you'll be able to provide all blocks for synchronizing nodes or requests of thin clients.
If keeping the full blockchain is a problem, you can reduce the storage-footprint by running Bitcoin Core in pruning mode. Just add prune=<n> to your bitcoin.conf, where <n> is the amount of youngest blocks you want to keep in terms of mebibytes storage. The minimum is 550 MiB.

4334: <p>Do I need to keep all blocks, from block 0 up to the current one, when running Bitcoin Core, either as a full node or not? Or can I just keep the more recent blocks to save space?</p>
 4334: <p>This is called pruning.</p>

<p>From <a href="https://bitcoin.stackexchange.com/a/38847/4334">here</a>:</p>

<blockquote>
  <p>Since Bitcoin-Core 0.11.0 you can prune (trim) the blockchain in
  Bitcoin-Qt. But not from the UI. You need to add <code>-prune=550</code> to your
  bitcoin.conf file and restart Bitcoin-Qt.</p>
  
  <p><strong>Explanation:</strong> <code>-prune=&lt;target in MiB&gt;</code> will tell bitcoin-core to remove blocks which are older than oldest block that can be kept with
  a chainsize (sum of block-sizes) of <code>&lt;target&gt;</code> (min. 550MiB as example
  above shows). A minimum of 550MiB ensures to keep at least 288 blocks
  (~2 days). 
  <em>(simple explanation not including undo-data)</em></p>
  
  <p><strong>Restriction:</strong> <code>-prune</code> does disable all wallet functions in version 0.11 (will work with a wallet in version 0.12).</p>
</blockquote>

<p>Obviously, as a full node you can't serve historical blocks you don't have, so you're more like a P2P leecher.</p>
 5406: <p>Full nodes keep all blocks by default, but this is not necessary to achieve full node security. Full nodes validate the complete blockchain and enforce all consensus rules regardless of whether a full history is kept.<br>
Keeping all blocks is a service to the network, as you'll be able to provide all blocks for synchronizing nodes or requests of thin clients.</p>

<p>If keeping the full blockchain is a problem, you can reduce the storage-footprint by running Bitcoin Core in pruning mode. Just add <code>prune=&lt;n&gt;</code> to your <code>bitcoin.conf</code>, where <code>&lt;n&gt;</code> is the amount of youngest blocks you want to keep in terms of mebibytes storage. The minimum is 550 MiB.</p>
