Users have been clamoring for site-specific preferences for years, often asking specifically for the ability to set zoom, author/user mode, or fit to width on a site-by-site basis. Yet, when site-specific preferences were introduced in Opera 9.0 Preview 1, those oft-requested preferences were missing and still haven't turned up six months later. I'll try to explain why, but first let me explain how things have worked historically.
Prior to Opera 9, there were two* types of preferences: global and window-level. Global preferences are the defaults used for all web pages. Window-level preferences are overrides used for specific tabs and tabs opened from those tabs. Window-level overrides exist for the following preferences: zoom, show images, fit to width, and author/user mode.
Here's how it works: a user sets the default preferences for all web pages by changing the global preferences. Then, if they want to change the zoom preference to more easily read an article loaded in a specific tab, they'll change the zoom window-level preference for that tab. The zoom preference for other currently open tabs won't change and new tabs will still use the global preference. However, any tab opened from the tab where the zoom preference was changed will inherit the window-level override of its parent tab.
This sounds complicated, but is intuitive in practice. Say you go to a news site and find the text too small to read. No problem, you simply increase the zoom level for that tab. Now, you decide you want to read a handful of articles on that news site, so you open them in background tabs. You're likely to have the same problem reading the small text in all the articles you just opened as you did on the main site. Luckily, the zoom preference you set in the original tab is inherited to all the tabs you just opened. In other browsers, you're only recourse is to change the global preference, which isn't really what you want.
One quick caveat: several global preference changes don't take effect immediately in the open tabs. For instance, when you disable JavaScript (JS), it isn't actually disabled for open web pages until you reload the web page. Thus, you can disable JS in a particular tab, reload the page, do whatever you need, re-enable JS, reload the page, and none of the other open web pages will know the difference. This makes it seem like you're only changing the preference for a specific tab, but you're really changing the default for all tabs. Many other preferences, such as default web page font, take effect immediately.
Fast forward to Opera 9 and the introduction of site-specific preferences (SSPs). SSPs allow you to override the global preferences on specific web pages. Let's take an example: by default, Opera blocks all unrequested popups. If you frequent a site that uses unrequested popups that you actually want to see, you'd add a SSP for the site so all popups are allowed. The SSP overrides the global default, thus whenver you visit that site, you'll get unrequested popups, but everywhere else, they'll continue to be blocked. It's a bit like white/black-listing, but taken to the next level.
While SSP are a great new feature, there are three main problems with the current SSP interface: 1) when you change a SSP preference, you also change all the other SSP preferences on that tab in the preferences dialog, 2) you can't easily return a SSP preference to the global default, and 3) window-level preferences are not available as SSP. The main reason for latter issue is that it isn't clear how the three levels of preferences will interact. SSPs override global preferences and window-level preferences override global preferences, but do SSPs override window-level preferences or do window-level preferences override SSPs?
Opera 9 is just our first attempt at SSPs. If you look back at many of Opera's features, they've evolved version by version, until they become polished, accessible, and intuitive. I expect the same will happen with SSPs, yet another reason to enjoy Opera 9 and look forward to what's next.
* OK, there's technically a third hybridish preference for setting the page encoding. You can't set the default page encoding from the preferences at all. When you change it via the View menu, all new tabs and the active tab will use the new encoding while all other currently open tabs will continue using the old encoding.