Allow Skylark rules to be private.

--
MOS_MIGRATED_REVID=97662036
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index 05ad52a..0286796 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -225,7 +225,7 @@
    * of that name already exists. Use {@link #overrideAttribute} in that case.
    */
   public static final class Builder {
-    private static final Pattern RULE_NAME_PATTERN = Pattern.compile("[A-Za-z][A-Za-z0-9_]*");
+    private static final Pattern RULE_NAME_PATTERN = Pattern.compile("[A-Za-z_][A-Za-z0-9_]*");
 
     /**
      * The type of the rule class, which determines valid names and required
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java
index 6fcf85f..924bd04 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java
@@ -304,10 +304,6 @@
           throw new EvalException(ast.getLocation(),
               "Invalid rule class hasn't been exported by a Skylark file");
         }
-        if (ruleClassName.startsWith("_")) {
-          throw new EvalException(ast.getLocation(), "Invalid rule class name '" + ruleClassName
-              + "', cannot be private");
-        }
         if (type == RuleClassType.TEST != TargetUtils.isTestRuleName(ruleClassName)) {
           throw new EvalException(ast.getLocation(), "Invalid rule class name '" + ruleClassName
               + "', test rule class names must end with '_test' and other rule classes must not");