Rixstep
 About | ACP | Buy | Industry Watch | Learning Curve | News | Products | Search | Substack
Home » Products » Reviews » The Good

Safari 3.1.2

Apple Inc
1 Infinite Loop
Cupertino CA 95014
US
Rating: ☆☆☆☆

Collateral damage:
None


Firefox has become the 'gorilla' of the browser space - more and more it's a standard the rest of the market measure themselves against. It has widespread support in terms of developers, users, add-ons, plugins, and so forth.

On Apple's OS X it enjoys a considerable chunk of the demographic - far higher than on the average as witnessed by this recent report from this site.

Safari might have more users but it's native - it's already there. Firefox users have to go out of their way to get it.

A lot's been written about Firefox 3.0.3 - mostly positive. The program's extremely stable, running the acknowledged Gecko rendering engine.

But not only is Firefox not on Apple boxes 'OOTB' - it's also not a native application. Ordinarily on relatively chaotic platforms such as Windows and Linux this wouldn't make so much difference. But on Apple's platform it does. Not only is native software going to look better - it's going to perform better as well. And it's going to be better integrated with the platform as a whole.

And on no platform does this apply as much as it does on OS X.

OS X inherits the incomparable space age text system NSText from NeXTSTEP: this is something no other platform has and probably never will have either. NSText takes up a sizeable chunk of the Cocoa framework code - and it really pays off.

But it's not just NSText that puts Safari out in front - it's the way the application is designed and developed. Despite its well known warts it's by far the easiest web browser to use, for developer and user alike.

1. Integration. The importance of integration cannot be overstated. Safari is built specifically with - and to run on - one operating system. Its graphical interface uses the tools already built into the platform. No more pale faded gray Windows pushbuttons and other controls as Firefox will use - you get the real native ones. They look better. Of course they do.

Text behaves as text should all over the place. You can not only copy and paste as per usual - you can also use the 'find clipboard' in the same way. Try hitting ⌘E wherever you want in Firefox; try hitting ⌘G for that matter. Firefox doesn't use native OS X controls; Safari of course does. You're not running a web application functionally disconnected from the rest of your apps; you connect.

Try using Cocoa services on Firefox: Firefox is not Cocoa. You can't integrate. As any ACP Service user can attest: they're indispensable. You can transform text anywhere at all. Do almost anything you want. Cleanups, resolve command line paths, strip HTML, tidy up munged quotes in webmail - anything. And you can search with thousands of web resources in the same package. You can't do that with Firefox because Firefox is not 'native' and doesn't integrate with Cocoa. You can do it in all your other apps - but not Firefox. You're cut off from the rest of your operating system with Firefox.

2. Form and function both. If there's one thing the Safari team are always going to get right it's the form. Firefox today is emulating the look of Safari; even other Apple products have followed suit. And small cosmetic bloopers such as the one below from Firefox 3.0.3 are less likely to surface.

No big deal: clicking on the 'Clear' button does this; there's a drag corner in the bottom right so it can be corrected; but it's just not the type of thing one is likely to encounter with Safari.

Developers have it better too - Safari's source window is miles ahead of Firefox's because it's so simple and doesn't try to get too fancy.

You see the actual text being used. And the control has the decency to wrap lines - something people on Windows and Linux still haven't got around to.

Firefox is using the same old source code Moz had ten years ago - not one iota of improvement what can be seen.

And again: the FF crew seem still convinced you just gotta put hard line breaks in everything - electronic mail, web pages, the works.

They're years behind.

'Find' functionality in Safari and Firefox today are roughly equivalent; which came first? It hardly matters. They're both good. But Safari will automatically pick up the current contents of the 'find clipboard' and Firefox will not.

[Strangely Firefox puts things on the 'find clipboard' - it just doesn't take them off. Whatever. Ed.]

The picky user will also prefer the arrow keys in Safari's search - used in the proper order - to Firefox's 'Next|Previous' buttons placed as they are in an illogical order. This is mere cosmetics but again: it's a question of form as well as function. And a case where the former (form) actually helps the latter (function).

Finally: the graphics are just a bit better in Safari. It's obvious the FF crew have attempted to emulate Safari but at the same time not get too close; FF certainly looks better and more consistent than it's done in the past; but it'll take quite the effort to ever beat Apple at their own graphics game.

3. Speed and efficiency. Safari and Firefox are really close when it comes to rendering pages, despite the hype seen from both sides. The difference is more apparent when launching the applications for the first time in a session. Safari's binaries are much more compact and they rely on a great number of system frameworks that are probably already loaded; the non-native Firefox doesn't use these modules - it has to ship with and use its own.

Firefox.app/Contents/MacOS/components/libalerts_s.dylib
Firefox.app/Contents/MacOS/components/libbrowsercomps.dylib
Firefox.app/Contents/MacOS/components/libbrowserdirprovider.dylib
Firefox.app/Contents/MacOS/libfreebl3.dylib
Firefox.app/Contents/MacOS/libmozjs.dylib
Firefox.app/Contents/MacOS/libnspr4.dylib
Firefox.app/Contents/MacOS/libnss3.dylib
Firefox.app/Contents/MacOS/libnssckbi.dylib
Firefox.app/Contents/MacOS/libnssdbm3.dylib
Firefox.app/Contents/MacOS/libnssutil3.dylib
Firefox.app/Contents/MacOS/libplc4.dylib
Firefox.app/Contents/MacOS/libplds4.dylib
Firefox.app/Contents/MacOS/libsmime3.dylib
Firefox.app/Contents/MacOS/libsoftokn3.dylib
Firefox.app/Contents/MacOS/libsqlite3.dylib
Firefox.app/Contents/MacOS/libssl3.dylib
Firefox.app/Contents/MacOS/libxpcom.dylib

firefox-bin links with the following modules.

@executable_path/libmozjs.dylib (compatibility version 1.0.0, current version 1.0.0)
@executable_path/libnspr4.dylib (compatibility version 1.0.0, current version 1.0.0)
@executable_path/libplc4.dylib (compatibility version 1.0.0, current version 1.0.0)
@executable_path/libplds4.dylib (compatibility version 1.0.0, current version 1.0.0)
@executable_path/libxpcom.dylib (compatibility version 1.0.0, current version 1.0.0)
@executable_path/XUL (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 128.0.0)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 11.0.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.1.3)

Although Safari links with a greater number of modules they're integrated into the platform and many are already running.

/System/Library/Frameworks/AddressBook.framework/Versions/A/AddressBook (compatibility version 1.0.0, current version 695.0.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 949.33.0)
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 34.0.0)
/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 136.0.0)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 12.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.14.0)
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 32.0.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 677.19.0)
/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/JavaScriptCore (compatibility version 1.0.0, current version 525.18.0)
/System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 34102.0.0)
/System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation (compatibility version 1.0.0, current version 32989.0.0)
/System/Library/Frameworks/SecurityInterface.framework/Versions/A/SecurityInterface (compatibility version 1.0.0, current version 32532.0.0)
/System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration (compatibility version 1.0.0, current version 212.2.0)
/System/Library/Frameworks/WebKit.framework/Versions/A/WebKit (compatibility version 1.0.0, current version 525.18.0)
/System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport (compatibility version 1.0.0, current version 1.0.0)
/System/Library/PrivateFrameworks/SyndicationUI.framework/Versions/A/SyndicationUI (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.1)

Firefox runs a lot of JavaScript - something Safari's not going to do. JavaScript is always going to take more time than native code - no matter how well the JavaScript engine is tweaked.

Firefox.app/Contents/MacOS/chrome/browser.jar
Firefox.app/Contents/MacOS/chrome/classic.jar
Firefox.app/Contents/MacOS/chrome/comm.jar
Firefox.app/Contents/MacOS/chrome/en-US.jar
Firefox.app/Contents/MacOS/chrome/pippki.jar
Firefox.app/Contents/MacOS/chrome/reporter.jar
Firefox.app/Contents/MacOS/chrome/toolkit.jar
Firefox.app/Contents/MacOS/plugins/JavaEmbeddingPlugin.bundle/Contents/Resources/Java/JavaEmbeddingPlugin.jar
Firefox.app/Contents/MacOS/plugins/MRJPlugin.plugin/Contents/MacOS/MRJPlugin.jar

Firefox also has a slew of proprietary 'XPCOM' files it also needs to run.

Firefox.app/Contents/MacOS/components/alerts.xpt
Firefox.app/Contents/MacOS/components/appshell.xpt
Firefox.app/Contents/MacOS/components/appstartup.xpt
Firefox.app/Contents/MacOS/components/autocomplete.xpt
Firefox.app/Contents/MacOS/components/autoconfig.xpt
Firefox.app/Contents/MacOS/components/browser-feeds.xpt
Firefox.app/Contents/MacOS/components/browsercompsbase.xpt
Firefox.app/Contents/MacOS/components/browserplaces.xpt
Firefox.app/Contents/MacOS/components/browsersearch.xpt
Firefox.app/Contents/MacOS/components/caps.xpt
Firefox.app/Contents/MacOS/components/chardet.xpt
Firefox.app/Contents/MacOS/components/chrome.xpt
Firefox.app/Contents/MacOS/components/commandhandler.xpt
Firefox.app/Contents/MacOS/components/commandlines.xpt
Firefox.app/Contents/MacOS/components/composer.xpt
Firefox.app/Contents/MacOS/components/content_base.xpt
Firefox.app/Contents/MacOS/components/content_html.xpt
Firefox.app/Contents/MacOS/components/content_htmldoc.xpt
Firefox.app/Contents/MacOS/components/content_xmldoc.xpt
Firefox.app/Contents/MacOS/components/content_xslt.xpt
Firefox.app/Contents/MacOS/components/content_xtf.xpt
Firefox.app/Contents/MacOS/components/contentprefs.xpt
Firefox.app/Contents/MacOS/components/cookie.xpt
Firefox.app/Contents/MacOS/components/directory.xpt
Firefox.app/Contents/MacOS/components/docshell.xpt
Firefox.app/Contents/MacOS/components/dom.xpt
Firefox.app/Contents/MacOS/components/dom_base.xpt
Firefox.app/Contents/MacOS/components/dom_canvas.xpt
Firefox.app/Contents/MacOS/components/dom_core.xpt
Firefox.app/Contents/MacOS/components/dom_css.xpt
Firefox.app/Contents/MacOS/components/dom_events.xpt
Firefox.app/Contents/MacOS/components/dom_html.xpt
Firefox.app/Contents/MacOS/components/dom_json.xpt
Firefox.app/Contents/MacOS/components/dom_loadsave.xpt
Firefox.app/Contents/MacOS/components/dom_offline.xpt
Firefox.app/Contents/MacOS/components/dom_range.xpt
Firefox.app/Contents/MacOS/components/dom_sidebar.xpt
Firefox.app/Contents/MacOS/components/dom_storage.xpt
Firefox.app/Contents/MacOS/components/dom_stylesheets.xpt
Firefox.app/Contents/MacOS/components/dom_svg.xpt
Firefox.app/Contents/MacOS/components/dom_traversal.xpt
Firefox.app/Contents/MacOS/components/dom_views.xpt
Firefox.app/Contents/MacOS/components/dom_xbl.xpt
Firefox.app/Contents/MacOS/components/dom_xpath.xpt
Firefox.app/Contents/MacOS/components/dom_xul.xpt
Firefox.app/Contents/MacOS/components/downloads.xpt
Firefox.app/Contents/MacOS/components/editor.xpt
Firefox.app/Contents/MacOS/components/embed_base.xpt
Firefox.app/Contents/MacOS/components/extensions.xpt
Firefox.app/Contents/MacOS/components/exthandler.xpt
Firefox.app/Contents/MacOS/components/exthelper.xpt
Firefox.app/Contents/MacOS/components/fastfind.xpt
Firefox.app/Contents/MacOS/components/feeds.xpt
Firefox.app/Contents/MacOS/components/find.xpt
Firefox.app/Contents/MacOS/components/fuel.xpt
Firefox.app/Contents/MacOS/components/gfx.xpt
Firefox.app/Contents/MacOS/components/htmlparser.xpt
Firefox.app/Contents/MacOS/components/imgicon.xpt
Firefox.app/Contents/MacOS/components/imglib2.xpt
Firefox.app/Contents/MacOS/components/inspector.xpt
Firefox.app/Contents/MacOS/components/intl.xpt
Firefox.app/Contents/MacOS/components/jar.xpt
Firefox.app/Contents/MacOS/components/jsdservice.xpt
Firefox.app/Contents/MacOS/components/layout_base.xpt
Firefox.app/Contents/MacOS/components/layout_printing.xpt
Firefox.app/Contents/MacOS/components/layout_xul.xpt
Firefox.app/Contents/MacOS/components/layout_xul_tree.xpt
Firefox.app/Contents/MacOS/components/locale.xpt
Firefox.app/Contents/MacOS/components/loginmgr.xpt
Firefox.app/Contents/MacOS/components/lwbrk.xpt
Firefox.app/Contents/MacOS/components/microsummaries.xpt
Firefox.app/Contents/MacOS/components/migration.xpt
Firefox.app/Contents/MacOS/components/mimetype.xpt
Firefox.app/Contents/MacOS/components/mozbrwsr.xpt
Firefox.app/Contents/MacOS/components/mozfind.xpt
Firefox.app/Contents/MacOS/components/necko.xpt
Firefox.app/Contents/MacOS/components/necko_about.xpt
Firefox.app/Contents/MacOS/components/necko_cache.xpt
Firefox.app/Contents/MacOS/components/necko_cookie.xpt
Firefox.app/Contents/MacOS/components/necko_dns.xpt
Firefox.app/Contents/MacOS/components/necko_file.xpt
Firefox.app/Contents/MacOS/components/necko_ftp.xpt
Firefox.app/Contents/MacOS/components/necko_http.xpt
Firefox.app/Contents/MacOS/components/necko_res.xpt
Firefox.app/Contents/MacOS/components/necko_socket.xpt
Firefox.app/Contents/MacOS/components/necko_strconv.xpt
Firefox.app/Contents/MacOS/components/necko_viewsource.xpt
Firefox.app/Contents/MacOS/components/oji.xpt
Firefox.app/Contents/MacOS/components/parentalcontrols.xpt
Firefox.app/Contents/MacOS/components/pipboot.xpt
Firefox.app/Contents/MacOS/components/pipnss.xpt
Firefox.app/Contents/MacOS/components/pippki.xpt
Firefox.app/Contents/MacOS/components/places.xpt
Firefox.app/Contents/MacOS/components/plugin.xpt
Firefox.app/Contents/MacOS/components/pref.xpt
Firefox.app/Contents/MacOS/components/prefetch.xpt
Firefox.app/Contents/MacOS/components/profile.xpt
Firefox.app/Contents/MacOS/components/proxyObjInst.xpt
Firefox.app/Contents/MacOS/components/rdf.xpt
Firefox.app/Contents/MacOS/components/satchel.xpt
Firefox.app/Contents/MacOS/components/saxparser.xpt
Firefox.app/Contents/MacOS/components/sessionstore.xpt
Firefox.app/Contents/MacOS/components/shellservice.xpt
Firefox.app/Contents/MacOS/components/shistory.xpt
Firefox.app/Contents/MacOS/components/spellchecker.xpt
Firefox.app/Contents/MacOS/components/storage.xpt
Firefox.app/Contents/MacOS/components/toolkitprofile.xpt
Firefox.app/Contents/MacOS/components/txmgr.xpt
Firefox.app/Contents/MacOS/components/txtsvc.xpt
Firefox.app/Contents/MacOS/components/uconv.xpt
Firefox.app/Contents/MacOS/components/unicharutil.xpt
Firefox.app/Contents/MacOS/components/update.xpt
Firefox.app/Contents/MacOS/components/uriloader.xpt
Firefox.app/Contents/MacOS/components/url-classifier.xpt
Firefox.app/Contents/MacOS/components/urlformatter.xpt
Firefox.app/Contents/MacOS/components/webBrowser_core.xpt
Firefox.app/Contents/MacOS/components/webbrowserpersist.xpt
Firefox.app/Contents/MacOS/components/webshell_idls.xpt
Firefox.app/Contents/MacOS/components/widget.xpt
Firefox.app/Contents/MacOS/components/widget_cocoa.xpt
Firefox.app/Contents/MacOS/components/windowds.xpt
Firefox.app/Contents/MacOS/components/windowwatcher.xpt
Firefox.app/Contents/MacOS/components/xpcom_base.xpt
Firefox.app/Contents/MacOS/components/xpcom_components.xpt
Firefox.app/Contents/MacOS/components/xpcom_ds.xpt
Firefox.app/Contents/MacOS/components/xpcom_io.xpt
Firefox.app/Contents/MacOS/components/xpcom_system.xpt
Firefox.app/Contents/MacOS/components/xpcom_threads.xpt
Firefox.app/Contents/MacOS/components/xpcom_xpti.xpt
Firefox.app/Contents/MacOS/components/xpconnect.xpt
Firefox.app/Contents/MacOS/components/xpinstall.xpt
Firefox.app/Contents/MacOS/components/xulapp.xpt
Firefox.app/Contents/MacOS/components/xuldoc.xpt
Firefox.app/Contents/MacOS/components/xultmpl.xpt
Firefox.app/Contents/MacOS/components/zipwriter.xpt

Safari, being a native application, is going to be a lot simpler. There's less - or possibly no - reinventing the wheel.

4. Developer diagnostics. Firefox as mentioned falls short when it comes to displaying HTML code, using functionality that's remained basically unchanged through the years; but it does offer new features not yet found in Safari. Firefox also has a tab on its Page Info window ('Media') that beats Safari's 'Activity' window hands down - but then comes Safari's Web Inspector and cleans the field. This Web Inspector is so dazzling the Safari crew could probably make an arcade game out of it.

Safari's come a long way too - especially from the notorious 'build 48' that hosed people's user accounts. Its WebKit is based not on the Gecko rendering engine David Hyatt previously worked on but on KDE's KHTML. KTHML might be lighter - Gecko is infamously slow to load - but it's had its share of woes. In particular its JavaScript engine.

Nightly builds might have got rid of the worst of bugs but the number of crashes in DOM and JavaScript code wanted to grow geometrically as websites tweaked their code more and more. The key wasn't in addressing a constant stream of new issues but in just making sure it's not a 'crash and burn' when the unexpected is encountered.

Today with programmers from both Nokia and Google working on the project the prospects are good. Apple have the basics of a great rendering engine and a great browser that can only win on OS X by being a native application.

About | ACP | Buy | Industry Watch | Learning Curve | News | Products | Search | Substack
Copyright © Rixstep. All rights reserved.