Index: wp-includes/default-widgets.php
===================================================================
--- wp-includes/default-widgets.php	(revision 26081)
+++ wp-includes/default-widgets.php	(working copy)
@@ -1163,6 +1163,122 @@
 }
 
 /**
+ * Author Widget class
+ *
+ * @since 3.8
+ */
+class WP_Author_Widget extends WP_Widget {
+	public function __construct() {
+		parent::__construct( 'authors', __( 'Authors' ), array(
+				'classname'   => 'author_widget',
+				'description' => __( 'Display blogs authors with avatars and archive links.' ),
+			),
+			array(
+				'width' => 300,
+			)
+		);
+		add_action( 'save_post',    array( $this, 'flush_widget_cache' ) );
+		add_action( 'deleted_post', array( $this, 'flush_widget_cache' ) );
+		add_action( 'switch_theme', array( $this, 'flush_widget_cache' ) );
+	}
+
+	public function widget( $args, $instance ) {
+		$cache ='';// get_transient( 'author_widget' );
+
+		if ( ! is_array( $cache ) )
+			$cache = array();
+
+		if ( ! isset( $args['widget_id'] ) )
+			$args['widget_id'] = $this->id;
+
+		if ( isset( $cache[ $args['widget_id'] ] ) ) {
+			echo $cache[ $args['widget_id'] ];
+			return;
+		}
+
+		$authors = get_users( apply_filters( 'author_widget_user_args', array(
+			'fields' => 'all',
+			'who'    => 'authors',
+		) ) );
+
+		ob_start();
+
+		echo $args['before_widget'];
+		if ( ! empty( $instance['title'] ) )
+			echo $args['before_title'] . esc_html( $instance['title'] ) . $args['after_title'];
+		echo '<ul>';
+
+		foreach ( $authors as $author ) :
+			if ( ! $instance['all'] && ! count_user_posts( $author->ID ) )
+				continue;
+		?>
+
+		<li>
+			<a href="<?php echo esc_url( get_author_posts_url( $author->ID, $author->user_nicename ) ); ?>">
+				<?php if ( $instance['avatar_size'] > 0 ) echo get_avatar( $author->ID, $instance['avatar_size'] ); ?>
+				<strong><?php echo esc_html( $author->display_name ); ?></strong>
+			</a>
+		</li>
+
+		<?php
+		endforeach;
+
+		echo '</ul>';
+		echo $args['after_widget'];
+
+		$cache[ $args['widget_id'] ] = ob_get_flush();
+		set_transient( 'author_widget', $cache );
+	}
+
+	public function flush_widget_cache() {
+		delete_transient( 'author_widget' );
+	}
+
+	public function update( $new_instance, $old_instance ) {
+		$new_instance['title']       = strip_tags( $new_instance['title'] );
+		$new_instance['all']         = isset( $new_instance['all'] );
+		$new_instance['avatar_size'] = (int) $new_instance['avatar_size'];
+
+		$this->flush_widget_cache();
+
+		return $new_instance;
+	}
+
+	public function form( $instance ) {
+		$instance = wp_parse_args( $instance, array(
+			'title'       => '',
+			'all'         => false,
+			'avatar_size' => 48,
+		) );
+
+		?>
+		<p>
+			<label>
+				<?php _e( 'Title:' ); ?>
+				<input class="widefat" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
+			</label>
+		</p>
+		<p>
+			<label>
+				<input class="checkbox" type="checkbox" <?php checked( $instance['all'] ); ?> name="<?php echo $this->get_field_name( 'all' ); ?>" />
+				<?php _e( 'Include authors who have not written any posts' ); ?>
+			</label>
+		</p>
+		<p>
+			<label>
+				<?php _e( 'Avatar Size (px):' ); ?>
+				<select name="<?php echo $this->get_field_name( 'avatar_size' ); ?>">
+					<?php foreach( array( '0' => __( 'No Avatars' ), '16' => '16x16', '32' => '32x32', '48' => '48x48', '96' => '96x96', '128' => '128x128' ) as $value => $label ) : ?>
+						<option value="<?php echo esc_attr( $value ); ?>" <?php selected( $value, $instance['avatar_size'] ); ?>><?php echo esc_html( $label ); ?></option>
+					<?php endforeach; ?>
+				</select>
+			</label>
+		</p>
+		<?php
+	}
+}
+
+/**
  * Register all of the default WordPress widgets on startup.
  *
  * Calls 'widgets_init' action after all of the WordPress widgets have been
@@ -1201,6 +1317,9 @@
 
 	register_widget('WP_Nav_Menu_Widget');
 
+	if ( is_multi_author() )
+		register_widget( 'WP_Author_Widget' );
+
 	do_action('widgets_init');
 }
 
