You can do that. Each block contains the hash of the previous, so technically, it’s a block-chain.
But it’s not enough to make it useful, and that is not enough to be called a Blockchain in the meaning we commonly use. What you describe is just a publicly appendable graph (which can be useful too, don’t get me wrong!).
Everybody can upload any version of the block 1 referring to block 0. There can be hundreds of concurrent blocks tagged “#1” and containing a data+the hash of #0. That’s fine and it enables traceability, but it lacks what blockchain was designed for: eventually, you should get only one version of the truth (eventual consistency). For that, you need rules to define what is “valid” and should be rejected, and you need a consensus mechanism to decide collectively what version among all the valid possible versions is the one we agree upon.
To take Bitcoin’s example, the rules are:
- Every transaction should have an output equal to its input (value wise)
- The input from an address cannot be more than the balance of this address (you can’t have a negative balance)
- You have to prove that you know an address’ private key to send BTC from it
- And that’s about it.
This is easy to check for anyone, and every node can instantly do the math to check that each transaction is valid (less and less true for Ethereum, but that’s another topic).
According to that, if I have a balance of 1 BTC, sending 1 BTC to you is possible, and sending 1 BTC to Nakamoto is possible. But the 2 transactions cannot coexist. So if I publish each transaction in different blocks, there are both “valid transactions” and “valid blocks”.
But they describe 2 different states of the Distributed Ledger, aka The State We Should All Agreed Upon, so we have to get rid of one.
To collectively chose one, we need a consensus mechanism.
In Bitcoin, for example:
- Each block refer to exactly one block: the most recent
- The commonly accepted chain is the longer one
- To avoid flooding, the blocks are made hard to make (that’s the Proof of work), so that the time needed to generate one is way bigger than the time needed for everyone in the network to get the mined block and verify it.
- If the block only contains valid transactions, contains the hash of the previous block and passed the challenge needed for the proof of work, it is now the new accepted version of the truth. All future mined blocks which don’t rely on this one will now be dismissed
So, for an open distributed file system to be called a blockchain, you need rules defining a valid input, and you need a consensus mechanism to resolve concurrent propositions of the truth (aka state).
NB: Blockchain is just one solution to ensure eventual consistency. Other strategies exist, so we regroup them under the broader term “Distributed Ledger”. For example, IOTA makes each transaction refer to 2 other transactions rather than grouping them and making them pointing to only one previous block.
NB2: There are many consensus mechanisms. Some can be more or less centralized (to the extremely stupid: Node Omega get to decide what is the truth). It depends on your use case.
NB3: If you want your blockchain to be truly decentralized, you limit what you can upload (volume or complexity for validation). Otherwise, small validators can be flooded, and only very “powerful” computers get to validate. On Bitcoin you only have to validate less than 10 Mb an hour: that’s nothing, and even the smallest app can do it.
NB4: That’s why most blockchain doesn’t allow massive data dumps onchain (or rather make it prohibitively expensive).
NB5: That’s why when you want to put big dumps “onchain”, you really put a link to it (usually with proof of authenticity such as a hash and/or a signature). The link can be an address or a Content ID.
NB6: You guessed it: There are already many projects using blockchain to publish/do stuff with data, but only store a hash to it onchain, and store the data itself… on IPFS!
Bonus: Actually, IPFS could also be used as a transport and storage layer of your blockchain. I guess the whole Bitcoin Blockchain have already been uploaded somewhere on IPFS…
So to make a blockchain on top of IPFS, just add 2 things: rules and a consensus mechanism.