user4948: I'm trying to compile v0.8.6 of the core client from source, in order to compare IDB (Initial Blockchain Download) performance between versions.
I created a fresh Ubuntu Xenial 16.04 machine on Amazon EC2. I then ran the following commands (which were sufficient for version 0.9.3 and up):
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install build-essential autoconf libboost-all-dev \
                     libssl-dev libtool pkg-config libevent-dev

In addition for this specific version I ran:
sudo apt-get install libdb++-dev libminiupnpc-dev

I then checked out the source and started the compilation:
git clone https://github.com/bitcoin/bitcoin.git
cd bitcoin
git checkout v0.8.6
cd src/
make -f makefile.unix

I'm only interested in running headless bitcoind, but I'm not sure if it was already separated form the UI at that release.
I get the following error:
rpcrawtransaction.cpp:241:77:   required from here
/usr/include/boost/variant/get.hpp:178:5: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>’
 BOOST_STATIC_ASSERT_MSG(
 ^
makefile.unix:172: recipe for target 'obj/rpcrawtransaction.o' failed
make: *** [obj/rpcrawtransaction.o] Error 1

Interestingly 0.7, 0.6 and 0.5 do compile successfully, although they get stuck during IDB, so perhaps compilation just failed silently. I'll make a separate post for those later.
I suspect that I need to install some very specific versions of dependencies, but I'm not sure which and how to go about that. I haven't used Linux in years.
I still have the VM, so I can provide more details if needed.
I'm open to alternative approaches, even using a Windows VM :-) 

user4948: Nick ODell pointed me to the solution:
Edit rpcrawtransaction.cpp and change:
const CScriptID& hash = boost::get<const CScriptID&>(address);

To:
const CScriptID& hash = boost::get<CScriptID>(address);

This was sufficient to get it to compile.
In addition I applied the OpenSSL patch Pieter Wuille pointed out.
You have to do this manually because depends/packages/openssl.mk no longer exists, and the function name and signature has changed. Simply open src/key.cpp and replace everything inside the CKey::Verify function brackets with this new version.
More than 210,000 blocks synced so far, so I'm assuming this worked. 

user48884: You can use the gitian build system. Instructions for building 0.8.x with gitian are available here: https://github.com/bitcoin/bitcoin/tree/0.8/contrib/gitian-descriptors and here: https://github.com/bitcoin/bitcoin/blob/0.8/doc/release-process.md. Using gitian should get you exactly the same binaries as those that were released.

4948: <p>I'm trying to compile v0.8.6 of the core client from <a href="https://github.com/bitcoin/bitcoin/releases/tag/v0.8.6" rel="nofollow noreferrer">source</a>, in order to compare IDB (Initial Blockchain Download) performance between versions.</p>

<p>I created a fresh Ubuntu Xenial 16.04 machine on Amazon EC2. I then ran the following commands (which were sufficient for version 0.9.3 and up):</p>

<pre><code>sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install build-essential autoconf libboost-all-dev \
                     libssl-dev libtool pkg-config libevent-dev
</code></pre>

<p>In addition for this specific version I ran:</p>

<pre><code>sudo apt-get install libdb++-dev libminiupnpc-dev
</code></pre>

<p>I then checked out the source and started the compilation:</p>

<pre><code>git clone https://github.com/bitcoin/bitcoin.git
cd bitcoin
git checkout v0.8.6
cd src/
make -f makefile.unix
</code></pre>

<p>I'm only interested in running headless <code>bitcoind</code>, but I'm not sure if it was already separated form the UI at that release.</p>

<p>I get the following error:</p>

<pre><code>rpcrawtransaction.cpp:241:77:   required from here
/usr/include/boost/variant/get.hpp:178:5: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE&lt;false&gt;’
 BOOST_STATIC_ASSERT_MSG(
 ^
makefile.unix:172: recipe for target 'obj/rpcrawtransaction.o' failed
make: *** [obj/rpcrawtransaction.o] Error 1
</code></pre>

<p>Interestingly 0.7, 0.6 and 0.5 do compile successfully, although they get stuck during IDB, so perhaps compilation just failed silently. I'll make a separate post for those later.</p>

<p>I suspect that I need to install some very specific versions of dependencies, but I'm not sure which and how to go about that. I haven't used Linux in years.</p>

<p>I still have the VM, so I can provide more details if needed.</p>

<p>I'm open to alternative approaches, even using a Windows VM :-) </p>
 4948: <p>Nick ODell <a href="https://bitcoin.stackexchange.com/questions/55269/how-do-i-compile-core-0-8-6-on-ubuntu-ec2?noredirect=1#comment64244_55269">pointed</a> me to the <a href="https://github.com/bitcoin/bitcoin/issues/6113#issuecomment-298234393" rel="nofollow noreferrer">solution</a>:</p>

<p>Edit <code>rpcrawtransaction.cpp</code> and change:</p>

<pre><code>const CScriptID&amp; hash = boost::get&lt;const CScriptID&amp;&gt;(address);
</code></pre>

<p>To:</p>

<pre><code>const CScriptID&amp; hash = boost::get&lt;CScriptID&gt;(address);
</code></pre>

<p>This was sufficient to get it to compile.</p>

<p>In addition I applied the OpenSSL <a href="https://github.com/bitcoin/bitcoin/pull/5634/files" rel="nofollow noreferrer">patch</a> Pieter Wuille <a href="https://bitcoin.stackexchange.com/questions/55269/how-do-i-compile-core-0-8-6-on-ubuntu-ec2?noredirect=1#comment64263_55269">pointed out</a>.</p>

<p>You have to do this manually because <code>depends/packages/openssl.mk</code> no longer exists, and the function name and signature has changed. Simply open <code>src/key.cpp</code> and replace everything inside the <code>CKey::Verify</code> function brackets with <a href="https://github.com/theuni/bitcoin/blob/8dccba6a45db0466370726ed462b9da2eae43bce/src/ecwrapper.cpp#L120-L136" rel="nofollow noreferrer">this new version</a>.</p>

<p>More than 210,000 blocks synced so far, so I'm assuming this worked. </p>
 48884: <p>You can use the gitian build system. Instructions for building 0.8.x with gitian are available here: <a href="https://github.com/bitcoin/bitcoin/tree/0.8/contrib/gitian-descriptors" rel="nofollow noreferrer">https://github.com/bitcoin/bitcoin/tree/0.8/contrib/gitian-descriptors</a> and here: <a href="https://github.com/bitcoin/bitcoin/blob/0.8/doc/release-process.md" rel="nofollow noreferrer">https://github.com/bitcoin/bitcoin/blob/0.8/doc/release-process.md</a>. Using gitian should get you exactly the same binaries as those that were released.</p>
