user1766: How are popular online bitcoin wallets, like blockchaininfo's implemented? Why aren't they open-source?

user153: If someone wishes to share their work with me, I am grateful.  But I do not expect that others are obligated to share their work.

user323: As someone that has implemented a small eWallet, I suppose I can answer this question from my perspective.
An implementation of an eWallet is fairly simple. Using the official API makes everything come down to issuing correct JSON RPC calls. You generally have a bitcoind instance running on a server, along with your website front. The main problem is making sure that your site can distinguish between various people and make sure they can't access each other's money. In practice, it's fairly simple.
There are a few implementation roads you can take with eWallets:

You can have one account per person, so as long as you can distinguish between people your website can be "stateless", as in not keeping any data at all. I have implemented that and it wasn't hard.
You can let each person have as many accounts as they wish. This requires some additional info to be stored on your website and to ensure your naming is unique. Also, not much of a problem, I have done it.
You can move everyone's money into a shared pool and keep track of how much does each person have. Your website server needs to have a separate database of balances. A bit more tricky, you have to keep in mind such problems like double-spends and so forth not to credit scammers. As far as I know this is the most popular model for eWallets.
Focus mainly on keeping user's private keys. This is an option used for example by StrongCoin. The website can fetch your balances from such services as Block Explorer, decrypt your keys on your computer and let you create transactions there as well. An interesting model as it doesn't store all the private keys in one easily accessible wallet.dat to steal.

There are a lot of concerns one needs to keep in mind when implementing an eWallet - mainly safety of your funds and so forth, but that's a topic for another question.
As for why they aren't open source, well, I personally want to earn some money from my work, so I keep the source code for myself and anyone that commissions me for creating one for them. Other reasons not to go open source can be to avoid competition, or not to expose some potential security flaws in one's system.

user-1: Accuracy not guaranteed
Blockchain.info

Wallets are json files. The json file is encrypted using AES (crypto-js) before the browsers asks that it be stored on the server.
The wallet file is embedded in the login page as a html data attribute, the browser decrypts the file with the provided password and extracts a list of private keys and addresses.
The browser then asks blockchain info the balance and list of recent transactions for the decrypted addresses.
Upon sending the browsers asks blockchain.info for a list of unspent outputs. Then selects the outputs constructs and signs the transaction itself (bitcoin-js). When ready the transaction is serialised and sent to bloackchain for broadcasting to the bitcoin network.
Authentication is done using a unique "Shared Key" contained within the wallet file rather than the users password.
Server side we use 4 servers running MySQL cluster and java. A modified bitcoind client is used to populate the database.

See How It Works
Strongcoin

Similar to blockchain.info with client side encryption.
Private keys are stored individually on the server as a database entry rather than in a single wallet file. 
Authentication is done server side using traditional Sessions.  
Transaction construction and signing is all done in javascript.
Uses blockchain.info or blockexplorer.com to query balances of addresses. Uses blockchain.info to broadcast transactions.
Server side uses Ruby on Rails and Heroku 

Coinbase

Server side uses Ruby on Rails and Heroku
Custom MongoDB database to query balance of addresses.
Server selects outputs, constructs and broadcasts transactions.
Authentication is done server side using traditional Sessions.  
The web app directly connects to the bitcoin network using Bitcoin-Ruby to populate the database.

What are they not open source?
They are commercial enterprises with a large amount of development time invested. The code being open source would a) increase competition b) cause identical phishing sites to popup c) clones maybe be hacked or run by scammers damaging the reputation of the main site.
Parts of blockchain.info are open source. I personally hope the rest of the site will be fully open sourced one day but there is much to plan. If the code is just dumped it will not benefit anyone.

1766: <p>How are popular online bitcoin wallets, like blockchaininfo's implemented? Why aren't they open-source?</p>
 153: <p>If someone wishes to share their work with me, I am grateful.  But I do not expect that others are obligated to share their work.</p>
 323: <p>As someone that has implemented a small eWallet, I suppose I can answer this question from my perspective.</p>

<p>An implementation of an eWallet is fairly simple. Using the <a href="https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list" rel="nofollow">official API</a> makes everything come down to issuing correct JSON RPC calls. You generally have a bitcoind instance running on a server, along with your website front. The main problem is making sure that your site can distinguish between various people and make sure they can't access each other's money. In practice, it's fairly simple.</p>

<p>There are a few implementation roads you can take with eWallets:</p>

<ul>
<li>You can have one account per person, so as long as you can distinguish between people your website can be "stateless", as in not keeping any data at all. I have implemented that and it wasn't hard.</li>
<li>You can let each person have as many accounts as they wish. This requires some additional info to be stored on your website and to ensure your naming is unique. Also, not much of a problem, I have done it.</li>
<li>You can move everyone's money into a shared pool and keep track of how much does each person have. Your website server needs to have a separate database of balances. A bit more tricky, you have to keep in mind such problems like double-spends and so forth not to credit scammers. As far as I know this is the most popular model for eWallets.</li>
<li>Focus mainly on keeping user's private keys. This is an option used for example by <a href="https://www.strongcoin.com/" rel="nofollow">StrongCoin</a>. The website can fetch your balances from such services as <a href="http://blockexplorer.com/" rel="nofollow">Block Explorer</a>, decrypt your keys on your computer and let you create transactions there as well. An interesting model as it doesn't store all the private keys in one easily accessible wallet.dat to steal.</li>
</ul>

<p>There are a lot of concerns one needs to keep in mind when implementing an eWallet - mainly safety of your funds and so forth, but that's a topic for another question.</p>

<p>As for why they aren't open source, well, I personally want to earn some money from my work, so I keep the source code for myself and anyone that commissions me for creating one for them. Other reasons not to go open source can be to avoid competition, or not to expose some potential security flaws in one's system.</p>
 -1: <p><em>Accuracy not guaranteed</em></p>

<p><strong>Blockchain.info</strong></p>

<ul>
<li>Wallets are json files. The json file is encrypted using AES (<a href="http://code.google.com/p/crypto-js/">crypto-js</a>) before the browsers asks that it be stored on the server.</li>
<li>The wallet file is embedded in the login page as a html data attribute, the browser decrypts the file with the provided password and extracts a list of private keys and addresses.</li>
<li>The browser then asks blockchain info the balance and list of recent transactions for the decrypted addresses.</li>
<li>Upon sending the browsers asks blockchain.info for a list of unspent outputs. Then selects the outputs constructs and signs the transaction itself (<a href="http://bitcoinjs.org">bitcoin-js</a>). When ready the transaction is serialised and sent to bloackchain for broadcasting to the bitcoin network.</li>
<li>Authentication is done using a unique "Shared Key" contained within the wallet file rather than the users password.</li>
<li>Server side we use 4 servers running <a href="http://www.mysql.com/products/cluster/">MySQL cluster</a> and java. A modified bitcoind client is used to populate the database.</li>
</ul>

<p>See <a href="http://blockchain.info/wallet/how-it-works">How It Works</a></p>

<p><strong>Strongcoin</strong></p>

<ul>
<li>Similar to blockchain.info with client side encryption.</li>
<li>Private keys are stored individually on the server as a database entry rather than in a single wallet file. </li>
<li>Authentication is done server side using traditional Sessions.  </li>
<li>Transaction construction and signing is all done in javascript.</li>
<li>Uses blockchain.info or blockexplorer.com to query balances of addresses. Uses blockchain.info to broadcast transactions.</li>
<li>Server side uses <a href="http://rubyonrails.org">Ruby on Rails</a> and <a href="http://www.heroku.com">Heroku</a> </li>
</ul>

<p><strong>Coinbase</strong></p>

<ul>
<li>Server side uses <a href="http://rubyonrails.org">Ruby on Rails</a> and <a href="http://www.heroku.com">Heroku</a></li>
<li>Custom <a href="http://www.mongodb.org">MongoDB</a> database to query balance of addresses.</li>
<li>Server selects outputs, constructs and broadcasts transactions.</li>
<li>Authentication is done server side using traditional Sessions.  </li>
<li>The web app directly connects to the bitcoin network using <a href="https://github.com/lian/bitcoin-ruby">Bitcoin-Ruby</a> to populate the database.</li>
</ul>

<p><strong>What are they not open source?</strong></p>

<p>They are commercial enterprises with a large amount of development time invested. The code being open source would a) increase competition b) cause identical phishing sites to popup c) clones maybe be hacked or run by scammers damaging the reputation of the main site.</p>

<p>Parts of blockchain.info are <a href="https://github.com/blockchain/">open source</a>. I personally hope the rest of the site will be fully open sourced one day but there is much to plan. If the code is just dumped it will not benefit anyone.</p>
