<div>Not convinced. :)</div><div><br></div><div>1. Analogies</div><div><br></div><div>The analogy was made comparing a user agent that purges local storage to an OS throwing out files without explicit user action. This is misleading since most files arrive on your computer's disk via explicit user action. You copy files to your disk by downloading them from the internet, copying from a network drive, from a floppy, your camera, etc. You put them on your disk and you are responsible for removing them to reclaim space.</div>
<div><br></div><div>There are apps that create files in hidden places such as:</div><div><br></div><div>C:\Documents and Settings\linus\Local Settings\Application Data\Google\Chrome\User Data</div><div><br></div><div>If those apps do not manage their space carefully, users get annoyed. If such an app filled the user's disk they would have no idea what consumed the space or how to reclaim it. They didn't put the files there. How are they supposed to know to remove them? Most users have no idea that Local Settings exists (it is hidden), much less how to correctly manage any files they find.</div>
<div><br></div><div>A better analogy would be, "What if watching TV caused 0-5MB size files to silently be created from time to time in a hidden folder on your computer, and when your disk filled up both your TV and computer stopped working?"</div>
<div><br></div><div>Lengthy discussion on cleaning up hidden resources (persistent background content) here:</div><div><a href="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2009-July/021421.html">http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2009-July/021421.html</a></div>
<div><br></div><div>2. Attack</div><div><br></div><div>Without automatic space management the local storage consumed will grow without bound. I'm concerned that even without an intentional DOS attack users are going to be unhappy about their shrinking disks and not know what to do about it. The problem is worse on phones.</div>
<div><br></div><div>Things get worse still if a griefer wants to make a point about the importance of keeping web browsers logically stateless. Here's how such an attack could be carried out:</div><div><br></div><div>
2a. Acquire a bunch of unrelated domains from a bunch of registrars using stolen credit cards. Skip this step if UAs don't group subdomains under the same storage quota. For extra credit pick names that are similar to legitimate sites that use local storage.</div>
<div><br></div><div>2b. Start up some web hosting accounts. Host your attack code here. If they aren't free, use stolen credit cards.</div><div><br></div><div>2c. Buy ads from a network that subsyndicates from a network that subsyndicates from a major ad network that allows 3rd party ad serving. There are lots to choose from. No money? Stolen credit cards. Serve the ads from your previously acquired hosting accounts.</div>
<div><br></div><div>2d. Giggle. The user will be faced with the choice of writing off the space, deleting everything including their precious data, or carefully picking though tens of thousands of entries to find the few domains that hold precious content. User gets really unhappy if the attack managed to fill the disk.</div>
<div><br></div><div>3. Ingcognito / Private Browsing</div><div><br></div><div>Chrome's Incognito mode creates a temporary, in-memory profile. Local storage operations will work, but nothing will be saved after the Incognito window is closed. Safari takes a different approach and causes local storage operations to fail when in Private Browsing mode. Some sites won't work in Private Browsing. I don't recall what Firefox or IE do. Pick your poison.</div>
<div><br></div><div>Lengthy discussion here:</div><div><a href="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2009-April/019238.html">http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2009-April/019238.html</a></div>
<div><br></div><div>4. Cache Eviction Algorithms</div><div><br></div><div>At a minimum the HTML 5 spec should be silent on how user agents implement local storage policies. I would prefer the spec to make it clear that local storage is a cache, domains can use up to 5MB of space without interrupting the user, and that UAs were free to implement varying cache eviction algorithms.</div>
<div><br></div><div>Some browsers may provide interface to allow users to specify precious local storage, some may not. Eviction policies for installed extensions may be different than those for web pages. Quotas for extensions may be different than that for web pages. Non-browser UAs such as Dashboard, AIR, etc. may have different policies.</div>
<div><br></div><div>If the spec requires UAs to maintain local storage as 'precious' it will be the first such feature in HTML 5. Everything else in the spec is treated as volatile.</div><div><br></div><div>Linus</div>
<div><br></div><div><br><div class="gmail_quote">On Tue, Aug 25, 2009 at 4:36 PM, Jeremy Orlow <span dir="ltr"><<a href="mailto:jorlow@chromium.org" target="_blank">jorlow@chromium.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><div><div></div><div>On Tue, Aug 25, 2009 at 4:18 PM, Brady Eidson <span dir="ltr"><<a href="mailto:beidson@apple.com" target="_blank">beidson@apple.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div style="word-wrap:break-word"><br><div><div><div>On Aug 25, 2009, at 3:51 PM, Jeremy Orlow wrote:</div><br></div><blockquote type="cite"><div class="gmail_quote"><div>On Tue, Aug 25, 2009 at 3:19 PM, Aaron Boodman <span dir="ltr"><<a href="mailto:aa@google.com" target="_blank">aa@google.com</a>></span> wrote:<br>



<blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204, 204, 204);border-left-style:solid;padding-left:1ex">

<div>On Tue, Aug 25, 2009 at 2:44 PM, Jeremy Orlow<<a href="mailto:jorlow@chromium.org" target="_blank">jorlow@chromium.org</a>> wrote:<br><br></div></blockquote></div><div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





Extensions are an example of an application that is less cloud-based.<br>
It would be unfortunate and weird for extension developers to have to<br>
worry about their storage getting tossed because the UA is running out<br>
of disk space.</blockquote><div><br></div><div>Extensions are pretty far out of scope of the spec (at least for now), right?  (Within Chrome, we can of course special case this.)</div></div></div></blockquote><div><br></div>



The current spec is about "Web Applications" of all forms, including those that are offline, and others that hope to break from from the *required* chain to the cloud.</div><div><br></div><div>Extensions based on web technology are just one form of this.  Widgets/gadgets are another.  Stand alone web applications are yet another.  Native applications that integrate HTML for their UI are another still.</div>



<div><br></div><div><div><blockquote type="cite"><div class="gmail_quote"><div>On Tue, Aug 25, 2009 at 3:09 PM, Jens Alfke <span dir="ltr"><<a href="mailto:snej@google.com" target="_blank">snej@google.com</a>></span> wrote:<br>





<blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204, 204, 204);border-left-style:solid;padding-left:1ex">

<div style="word-wrap:break-word">Interesting comments. Linus and Jeremy appear to be coming at this from a pure "cloud" perspective, where any important or persistent data is kept on a remote server and the browser, so local storage can be treated as merely a cache. That's definitely a valid position, but from my perspective, much of the impetus for having local storage is to be able to support <i>other</i> application models, where important data is stored locally. If browsers are free to dispose HTML5 local storage without the user's informed consent, such applications become dangerously unreliable.<div>





<div><br></div><div>For example, Linus wrote:</div><div><blockquote type="cite">User agents need to be free to garbage collect any local state. If they can't then attackers (or the merely lazy) will be able to fill up the user's disk. We can't expect web sites or users to do the chore of taking out the garbage.</blockquote>





<br></div></div><div>Replace "user agent" -> "operating system" and "local state" -> "user files", and you have an argument that, when the hard disk in my MacBook gets too full, the OS should be free to start randomly deleting my local files to make room. This would be a really bad idea.</div>





</div></blockquote><div><br></div><div>Well, it's certainly different from what we're used to.  I'm not convinced it's wrong though.  The web has gotten by pretty well with such a model so far.</div></div>



</div></blockquote><div><br></div></div>But behind the scenes, developers have shoehorned their own data storage solutions in to place because there hasn't been a good solution in place.  </div><div><br></div><div>Why should an app that is largely about client side experience have to store user preferences in cookies and hope they won't be purged, or load a plug-in that has reliable local storage, or sync preferences over the cloud to a server?</div>



<div><div><br><blockquote type="cite"><div class="gmail_quote"><div><div><br></div>
<blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204, 204, 204);border-left-style:solid;padding-left:1ex">

<div style="word-wrap:break-word"><div></div><div>Similar analogies — </div><div>• If the SD card in my Wii fills up, should the system automatically start deleting saved games?</div><div>• If my iPhone's Flash disk gets full, should it start deleting photos? What if I haven't synced those photos to my iTunes yet?</div>





<div><br></div><div>In each of those cases, what the device actually does is warns you about the lack of free space, and lets you choose what to get rid of.</div></div></blockquote><div><br></div><div>It's worth noting that today, OSs do a pretty poor job of helping you with this task.  (I don't see any reason why the spec will prohibit UAs from creating a good UI for this, though.)</div>



</div></div></blockquote><div><br></div></div>I completely agree OSs do a pretty poor job of helping with the task.  Browsers might be an innovating space here.  I challenge you to come up with a great UI for this that shows up in a UA.  I challenge the WHATWG to not decide that deleting user data is okay because it's the easiest way out. </div>



<div><div><br><blockquote type="cite"><div class="gmail_quote"><div>

<div> </div><blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204, 204, 204);border-left-style:solid;padding-left:1ex">





<div style="word-wrap:break-word"><div></div><div>Local storage is different from cloud storage. The HTML5 storage API can be used for both, so it shouldn't be limited to what's convenient for just one of them.</div>





</div></blockquote><div> </div><div>I still don't understand what use local storage has outside of 'cloud storage'.  Even in the extensions use case (which I think is out of scope for this spec), there's no reason you can't sync user preferences and such to the cloud.</div>



</div></div></blockquote><div><br></div></div>Once thing I think that HTML5 has made clear is that "web technologies" are no longer exclusively about "web sites" that exist solely "in the cloud."  Widgets/gadgets, html-based extensions, offline web applications, and native applications that use HTML/JS/CSS to embed parts of their UI are *all* covered by HTML5, and I don't think requiring the cloud for any of them is necessary.</div>



<div><br></div><div>Also - and I don't mean this to be flippant, I raise it as a serious point - not all web application developers are Google or Apple with access to a server infrastructure.  To many web developers, just "throwing data up on a server somewhere" is outside the constraints of their resources or their design.  </div>



<div><br></div><div>The cloud is within the scope of web technologies, but web technologies should not rely on the cloud.</div><div><div><br><blockquote type="cite"><div class="gmail_quote"><div>

<div>By the way, in case it's not clear, my position is not that UAs should take deleting user information lightly, my position is 1) this behavior should be left up to the UA and 2) when possible, developers should keep information in the cloud not local storage.</div>



</div></div></blockquote><div><br></div></div></div><div>Don't take my hyperboles too seriously - I don't *seriously* think that anyone is suggested browsers should be light hearted about deleting user data.</div>



<div><div>I think our positions are all pretty clear, and it's coming down to this differing philosophy.  </div><div><br></div></div><div>But my position is:</div><div>1) If this behavior is left up to the UA, then developers who are using web technologies to write applications and they don't want to have to worry about "the cloud" for their data are out of luck, because *one* browser that is willing to delete data behind the scenes ruins their reliable picture of the technology.</div>



<div>2) Developers should not be *forced* into using the cloud when it is not within the scope of what they're trying to develop.</div></div></blockquote><div><br></div></div></div><div>I still think there are non-trivial downsides to treating local storage (and presumable database) data as "sacred", but I guess I'm convinced that it's the correct way to go.  I hate throwing UI at problems, but it really does make a good deal of sense in this case.  Heuristics will still be helpful in that we can suggest what to delete to the user, but I guess the user should always make the final decision.</div>



<div><br></div><div>Linus, are you convinced?</div><div><br></div><div>J</div></div>
</blockquote></div><br></div>