Index: src/wp-includes/user.php
===================================================================
--- src/wp-includes/user.php	(revision 42248)
+++ src/wp-includes/user.php	(working copy)
@@ -435,6 +435,21 @@
 }
 
 /**
+ * Get the current user's gender
+ *
+ * @since MU (5.0.0)
+ *
+ * @return string The current user's gender, or 'unknown' if no user is logged in, or unset.
+ */
+function get_current_user_gender() {
+	if ( ! function_exists( 'wp_get_current_user' ) )
+		return 'unknown';
+
+	$user = wp_get_current_user();
+	return ( isset( $user->gender ) ? $user->gender : 'unknown' );
+}
+
+/**
  * Retrieve user option that can be either per Site or per Network.
  *
  * If the user ID is not given, then the current user will be used instead. If
@@ -1414,6 +1429,7 @@
  *                                             to build the second part of the user's display name
  *                                             if `$display_name` is not specified.
  *     @type string      $description          The user's biographical description.
+ *     @type string      $gender               The user's chosen gender.
  *     @type string|bool $rich_editing         Whether to enable the rich-editor for the user.
  *                                             False if not empty.
  *     @type string|bool $syntax_highlighting  Whether to enable the rich code editor for the user.
@@ -1629,6 +1645,8 @@
 	 */
 	$meta['description'] = apply_filters( 'pre_user_description', $description );
 
+	$meta['gender'] = empty( $userdata['gender'] ) ? 'unknown' : $userdata['gender'];
+
 	$meta['rich_editing'] = empty( $userdata['rich_editing'] ) ? 'true' : $userdata['rich_editing'];
 
 	$meta['syntax_highlighting'] = empty( $userdata['syntax_highlighting'] ) ? 'true' : $userdata['syntax_highlighting'];
@@ -1719,6 +1737,7 @@
 	 *     @type string   $first_name           The user's first name.
 	 *     @type string   $last_name            The user's last name.
 	 *     @type string   $description          The user's description.
+	 *     @type string   $gender               The user's gender.
 	 *     @type bool     $rich_editing         Whether to enable the rich-editor for the user. False if not empty.
 	 *     @type bool     $syntax_highlighting  Whether to enable the rich code editor for the user. False if not empty.
 	 *     @type bool     $comment_shortcuts    Whether to enable keyboard shortcuts for the user. Default false.
Index: src/wp-includes/class-wp-user.php
===================================================================
--- src/wp-includes/class-wp-user.php	(revision 42248)
+++ src/wp-includes/class-wp-user.php	(working copy)
@@ -32,6 +32,7 @@
  * @property string $spam
  * @property string $deleted
  * @property string $locale
+ * @property string $gender
  * @property string $rich_editing
  * @property string $syntax_highlighting
  */
Index: src/wp-admin/includes/user.php
===================================================================
--- src/wp-admin/includes/user.php	(revision 42248)
+++ src/wp-admin/includes/user.php	(working copy)
@@ -85,6 +85,10 @@
 	if ( isset( $_POST['description'] ) )
 		$user->description = trim( $_POST['description'] );
 
+	if ( isset( $_POST['gender'] ) ) {
+		$user->gender = in_array( $_POST['gender'], array( 'unknown', 'female', 'male' ), true ) ? $_POST['gender'] : 'unknown';
+	}
+
 	foreach ( wp_get_user_contact_methods( $user ) as $method => $name ) {
 		if ( isset( $_POST[$method] ))
 			$user->$method = sanitize_text_field( $_POST[$method] );
Index: src/wp-admin/user-edit.php
===================================================================
--- src/wp-admin/user-edit.php	(revision 42248)
+++ src/wp-admin/user-edit.php	(working copy)
@@ -551,6 +551,27 @@
 </tr>
 <?php endif; ?>
 
+<tr class="user-gender-wrap">
+    <th><label for="gender"><?php _e( 'What pronoun do you prefer?' ); ?></label></th>
+    <td>
+        <p>
+            <?php
+                $gender = get_user_meta( $user_id, 'gender', true );
+                if ( ! $gender ) {
+                    $gender = 'unknown';
+                }
+            ?>
+            <label><input name="gender" type="radio" value="female" <?php checked( 'female', $gender ); ?> /> <?php _e( 'Female: She published a new post.' ); ?></label><br />
+            <label><input name="gender" type="radio" value="male" <?php checked( 'male', $gender ); ?> /> <?php _e( 'Male: He published a new post.' ); ?></label><br />
+            <label><input name="gender" type="radio" value="unknown" <?php checked( 'unknown', $gender ); ?> /> <?php _e( 'Other/Unknown: They published a new post.' ); ?></label>
+        </p>
+        <p class="description">
+            <?php _e( 'This preference will allow WordPress to address you and to mention you to others using the appropriate grammatical gender.'); ?><br />
+            <?php _e( 'If "Other/Unknown" is chosen, WordPress will use gender-neutral words whenever possible.' ); ?>
+        </p>
+    </td>
+</tr>
+
 <?php
 /**
  * Filters the display of the password fields.
