What is the difference between _form_validate vs form_validate? I'm unsure which one you should use for a form_validation.

Seeing that _form_validate() starts with a _ makes it a private function following the Drupal coding standards if I'm not mistaken.

So my guess is that a form validation should be done with hook_validate().

But the question remains: what's the difference between the two and where should they be used?



EDIT:
I misunderstood the hook_validate() which is not the _validate "hook" used in the form API. I'll leave the question unchanged so other users can learn from my mistake.
You're totally correct, Drupal's coding standards denote anything with a _ prefix is seen as a pseudo-'private' function. As such the _form_validate() function was never meant to be called directly. Unless you really need to use it, and you're absolutely positive there's no other way to accomplish what you want, I wouldn't advise using it.

In fact only one function in the whole core system calls _form_validate(): drupal_validate_form(). It would stand to reason that you should be using this function instead (being that it's not marked as a private function).

These are the functions that Drupal uses internally to validate a managed form, so if you're using the Form API correctly you should never need to call them. Adding validate handlers to a form to validate individual elements is the correct way to do things.

Just to clear up a wee bit of terminology as well, hook_validate() has nothing to do with the form API as such; it's used by node-providing modules to validate nodes before saving. The validation handlers that you add to forms (with custom forms, or through hook_form_alter(), don't have a particular 'Drupal name' that I'm aware of.

Also, you don't actually even need to use the standard named _validate function if you don't want to...you can add a function with any name as a form validate handler:

$form['#validate'][] = 'my_strangely_named_function';


Drupal just looks for FORMNAME_validate() by default, and runs it if it exists.