I quadrati risultano spostati perché in:
codice:
context.fillRect(mouseX,mouseY,10,10)
dovrebbe essere *(mouseX - 5, mouseY - 5, 10, 10). Il codice non l'ho "ottimizzato", era solo per provare.

P.S.: mi spieghi questo passaggio?
codice:
initCanvas = function(){ 
  canvas = document.getElementById("canvas");
  context = canvas.getContext("2d");
  context.width = context.width;
  context.canvas.addEventListener('mousedown' , function() { mouseDown = 1; },false );
  context.canvas.addEventListener('mousemove' , getMousePosition ,false );
  context.canvas.addEventListener('mouseup' ,   function() { mouseDown = 0; } ,false );
  context.canvas.addEventListener('mouseleave' ,   function() { mouseDown = 0; } ,false );
}
Comunque, grazie

EDIT:
non avevo capito in che senso "spostati"
Questo succede perchè non ho regolato il rapporto tra le coordinate del mouse (che sono rispetto allo schermo) e quelle del quadrato da disegnare nel canvas (che sono rispetto al canvas stesso). Come detto prima il codice è solo di prova... una volta riuscito a farlo funzionare sarei passato ad ottimizzarlo.