¿Cuál es la diferencia entre las secciones require y require-dev en composer.json?

Estoy empezando a usar compositor, sé muy poco al respecto y tengo poca experiencia con el desarrollo de aplicaciones web.

Acabo de caminarNettuts + Tutorial, así que tengo una pregunta básica sobre el compositor.

{
  "require": {
    "laravel/framework": "4.0.*",
    "way/generators": "dev-master",
    "twitter/bootstrap": "dev-master",
    "conarwelsh/mustache-l4": "dev-master"
  },
  "require-dev": {
    "phpunit/phpunit": "3.7.*",
    "mockery/mockery": "0.7.*"
  },
  "autoload": {
    "classmap": [
      "app/commands",
      "app/controllers",
      "app/models",
      "app/database/migrations",
      "app/database/seeds",
      "app/tests/TestCase.php"
    ]
  },
  "scripts": {
    "post-update-cmd": "php artisan optimize"
  },
  "minimum-stability": "dev"
}
Lo que aparezca en la parte "require-dev", solo se descargará e instalará coninstalación del compositor --dev?Leí algo de la documentación del compositor, pero aún no entiendo, ¿por qué tenemos la parte de "require-dev"? ¿Es por eso que queremos ser específicos?versión del paquete en lugar de obtener siempre la última versión estable?