With any product, there is always some talk from the enthusiasts about how they could do it faster, cheaper, or simpler. Inevitably, there's a little bit of truth to both sides. Enthusiasts have been doing homebrew NAS for as long as free software has been around, but it takes far more work to put together a complete, polished solution that stands up under the stress of an enterprise environment.
One of the amusing things I like to do is to look back at the total amount of source code we wrote. Lines of source code by itself is obviously not a measure of complexity - it's possible to write complex software with very few lines of source, or simple software that's over engineered - but it's an interesting measure nonetheless. Below is the current output of a little script I wrote to count lines of code1 in our fish-gate. This does not include the approximately 40,000 lines of change made to the ON (core Solaris) gate, most of which we'll be putting back gradually over the next few months.
C (libak) 185386 # The core of the appliance kit C (lib) 12550 # Other libraries C (fcc) 11167 # A compiler adapted from dtrace C (cmd) 12856 # Miscellaneous utilities C (uts) 4320 # clustron driver ----------------------- ------ Total C 226279 JavaScript (web) 69329 # Web UI JavaScript (shell) 24227 # CLI shell JavaScript (common) 9354 # Shared javascript JavaScript (crazyolait) 2714 # Web transport layer (adapted from jsolait) JavaScript (tst) 40991 # Automated test code ----------------------- ------ Total Javascript 146615 Shell (lib) 4179 # Support scripts (primarily SMF methods) Shell (cmd) 5295 # Utilities Shell (tools) 6112 # Build tools Shell (tst) 6428 # Automated test code ----------------------- ------ Total Shell 22014 Python (tst) 34106 # Automated test code XML (metadata) 16975 # Internal metadata CSS 6124 # Stylesheets
[1] This is a raw line count. It includes blank lines and comments, so interpret it as you see fit.