There are new terms in Ethereum like smart contract. What is a DApp and how is it different from smart contracts?
DApp is an abbreviated form for decentralized application.
A DApp has its backend code running on a decentralized peer-to-peer network. Contrast this with an app where the backend code is running on centralized servers.
A DApp can have frontend code and user interfaces written in any language (just like an app) that can make calls to its backend. Furthermore, its frontend can be hosted on decentralized storage such as Swarm or IPFS.
If an app=frontend+server, since Ethereum contracts are code that runs on the global Ethereum decentralized peer-to-peer network, then:
DApp = frontend + contracts
Illustration of a DApp that uses a blockchain with smart contracts combined with the pillars of Swarm and Whisper:
A good Blog post by Vitalik Buterin goes through and the concept of a Dapp and other related concepts such as smart contract, Decentralised Autonomous Organisation, Decentraclised Corporation ect..
Here is the link with the Blog Post: DAOs, DACs, DAs and More: An Incomplete Terminology Guide
Find below a definition of DApp written in this doc called "The General Theory of Decentralized Applications, Dapps".
For an application to be considered a Dapp (pronounced Dee-app, similar to Email) it must meet the following criteria:
The application must be completely open-source, it must operate autonomously, and with no entity controlling the majority of its tokens. The application may adapt its protocol in response to proposed improvements and market feedback but all changes must be decided by consensus of its users.
The application's data and records of operation must be cryptographically stored in a public, decentralized blockchain in order to avoid any central points of failure.
The application must use a cryptographic token (bitcoin or a token native to its system) which is necessary for access to the application and any contribution of value from (miners / farmers) should be rewarded in the application’s tokens.
The application must generate tokens according to a standard crytptographic algorithm acting as a proof of the value nodes are contributing to the application (Bitcoin uses the Proof of Work Algorithm).
Clarification related to the terms you use in your question:
- Ethereum is a DApp, it tick all the boxes from the criterias listed in the above definition
- Smart contracts: don't have to be Open Source, do they? so no, smart contracts are not a DApp. Unless I miss something.
- Bitcoin is a DApp, it tick all the boxes from the criterias listed in the above definition
I think that some of the general belief around dApps referring exclusively to a backend that is driven by smart contracts, is limited.
A dApp indeed is a decentralized application, but it does not specifically dictate how it is decentralized.
A rational answer to this is that the front-end, being run on devices such as phones, browsers, etc, is not relevant to the decentralization aspect.
The back-end, on the other hand, must be decentralized, at least partly, if not wholly.
The backend logic could use any combination of the following (not a comprehensive list) infrastructure pieces:
- Decentralized file storage (IPFS, Filecoin, Storj, SIA, etc)
- Decentralized edge cloud storage (NOIA, etc)
- Decentralized immutable data storage (Ethereum smart contract, NEO smart contract, etc)
- Decentralized edge data store (Bluzelle, etc)
- Decentralized computing (Golem, SONM, etc)
Of course, these are just examples I thought of. Fact is, you could use whatever pieces you want, but for the app to be a dApp, most of your backend must be decentralized. There are always some pieces that are typically still centralized, such as DNS and even the packet networks that are used to reach the various decentralized pieces of your application.