Skip to content

Move OsRng down to rand - #1674

Merged
dhardy merged 7 commits into
masterfrom
push-putxlzvnyulq
Oct 30, 2025
Merged

Move OsRng down to rand#1674
dhardy merged 7 commits into
masterfrom
push-putxlzvnyulq

Conversation

@dhardy

@dhardydhardy commented Oct 21, 2025

Copy link
Copy Markdown
Member
  • Added a CHANGELOG.md entry

Summary

Moves OsRng from rand_core to rand.

Removes fns SeedableRng::from_os_rng and try_from_os_rng.

Motivation

This removes the dependency on getrandom, making rand_core dependency-free (unless serde is enabled) and allowing an easier path to stabilisation of rand_core. See rust-random/rand_core#13.

Details

Removed features std and os_rng from rand_core.

@dhardy
dhardy requested a review from newpavlovOctober 21, 2025 12:57
Comment threadsrc/rngs/std.rs
Comment on lines 40 to 44
/// Using a fresh seed **direct from the OS** is the most secure option:
/// ```
/// # use rand::{SeedableRng, rngs::StdRng};
/// let rng = StdRng::from_os_rng();
/// # use rand::{SeedableRng, rngs::{StdRng, OsRng}};
/// let rng = StdRng::try_from_rng(&mut OsRng).unwrap();
/// # let _: StdRng = rng;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is certainly less ergonomic than before, but affected us very little.

Unknown: how much this impacts other users.

@dhardydhardy mentioned this pull request Oct 21, 2025
6 tasks
@dhardydhardy mentioned this pull request Oct 22, 2025
1 task

@vksvks left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reverts a change we did a long time ago. Do you remember why we moved it from rand_os to rand_core in the first place?

@dhardy

Copy link
Copy Markdown
MemberAuthor

SeedableRng::from_os_rng requires OsRng. We want to keep SeedableRng in rand_core, so essentially we must choose between:

  1. Do not offer a from_os_rng method (this PR). This works fine for us but there are clearly some users (GH search).
  2. Status quo: rand_core depends on getrandom for from_os_rng.
  3. Add an extension trait SeedableRngExt: SeedableRng in rand and implement from_os_rng there. We could also add from_thread_rng in that case.

@dhardydhardy mentioned this pull request Oct 25, 2025
@dhardy
dhardy merged commit 5d07c2d into masterOct 30, 2025
15 checks passed
@dhardy
dhardy deleted the push-putxlzvnyulq branch October 30, 2025 08:54
tarcieri added a commit to tarcieri/rand that referenced this pull request Nov 5, 2025
Adds methods for seeding `SeedableRng`s as replacements for the
trait methods `SeedableRng::{from_os_rng, try_from_os_rng}` which were
removed in rust-random#1674.
tarcieri added a commit that referenced this pull request Nov 5, 2025
Adds methods for seeding `SeedableRng`s as replacements for the
trait methods `SeedableRng::{from_os_rng, try_from_os_rng}` which were
removed in #1674.
@tarcieritarcieri mentioned this pull request Nov 5, 2025
@zArubaru

Copy link
Copy Markdown

Now that ChaCha8Rng::from_os_rng() is deprecated and removed, maybe someone else is searching for a way to conditionally seed rng. Probably obvious for some, took me a while 😅

use rand::RngExt;use rand_chacha::rand_core::SeedableRng;use rand_chacha::ChaCha8Rng;let maybe_seed:Option<u64> = None;letmut rng = ifletSome(seed) = maybe_seed {ChaCha8Rng::seed_from_u64(seed)}else{ChaCha8Rng::from_rng(&mut rand::rng())};if rng.random_bool(0.1){println("Maybe this will print, maybe it won't!");}

kodiakhqBot pushed a commit to pdylanross/fatigue that referenced this pull request Jun 25, 2026
Bumps rand from 0.9.4 to 0.10.1.
Changelog
Sourced from rand's changelog.
[0.10.1] — 2026-02-11
This release includes a fix for a soundness bug; see #1763.
Changes
Document panic behavior of make_rng and add #[track_caller] (#1761)
Deprecate feature log (#1763)
#1761: rust-random/rand#1761
#1763: rust-random/rand#1763
[0.10.0] - 2026-02-08
Changes
The dependency on rand_chacha has been replaced with a dependency on chacha20. This changes the implementation behind StdRng, but the output remains the same. There may be some API breakage when using the ChaCha-types directly as these are now the ones in chacha20 instead of rand_chacha (#1642).
Rename fns IndexedRandom::choose_multiple -> sample, choose_multiple_array -> sample_array, choose_multiple_weighted -> sample_weighted, struct SliceChooseIter -> IndexedSamples and fns IteratorRandom::choose_multiple -> sample, choose_multiple_fill -> sample_fill (#1632)
Use Edition 2024 and MSRV 1.85 (#1653)
Let Fill be implemented for element types, not sliceable types (#1652)
Fix OsError::raw_os_error on UEFI targets by returning Option<usize> (#1665)
Replace fn TryRngCore::read_adapter(..) -> RngReadAdapter with simpler struct RngReader (#1669)
Remove fns SeedableRng::from_os_rng, try_from_os_rng (#1674)
Remove Clone support for StdRng, ReseedingRng (#1677)
Use postcard instead of bincode to test the serde feature (#1693)
Avoid excessive allocation in IteratorRandom::sample when amount is much larger than iterator size (#1695)
Rename os_rng -> sys_rng, OsRng -> SysRng, OsError -> SysError (#1697)
Rename Rng -> RngExt as upstream rand_core has renamed RngCore -> Rng (#1717)
Additions
Add fns IndexedRandom::choose_iter, choose_weighted_iter (#1632)
Pub export Xoshiro128PlusPlus, Xoshiro256PlusPlus prngs (#1649)
Pub export ChaCha8Rng, ChaCha12Rng, ChaCha20Rng behind chacha feature (#1659)
Fn rand::make_rng() -> R where R: SeedableRng (#1734)
Removals
Removed ReseedingRng (#1722)
Removed unused feature "nightly" (#1732)
Removed feature small_rng (#1732)
#1632: rust-random/rand#1632
#1642: rust-random/rand#1642
#1649: rust-random/rand#1649
#1652: rust-random/rand#1652
#1653: rust-random/rand#1653
#1659: rust-random/rand#1659
#1665: rust-random/rand#1665
#1669: rust-random/rand#1669
#1674: rust-random/rand#1674
#1677: rust-random/rand#1677
#1693: rust-random/rand#1693
#1695: rust-random/rand#1695
#1697: rust-random/rand#1697
... (truncated)
Commits
27ff4cb Prepare v0.10.1: deprecate feature log (#1763)
98d0638 make_rng: document panic and add #[track_caller] (#1761)
54e5eaa Fix doc error (#1758)
1ce4c08 Bump itoa from 1.0.17 to 1.0.18 in the all-deps group (#1756)
ccb734b docs: fix typo in doc comment (#1754)
357eb7d Bump libc from 0.2.182 to 0.2.183 in the all-deps group (#1753)
5e77fe5 Fix trait references in documentation (#1752)
da89185 Bump the all-deps group with 3 updates (#1751)
50516ff Bump the all-deps group with 2 updates (#1749)
fd71de9 Bump the all-deps group with 2 updates (#1747)
Additional commits viewable in compare view
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@dhardy@zArubaru@vks@newpavlov
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Move OsRng down to rand by dhardy · Pull Request #1674 · rust-random/rand · GitHub
Skip to content

Move OsRng down to rand - #1674

Merged
dhardy merged 7 commits into
masterfrom
push-putxlzvnyulq
Oct 30, 2025
Merged

Move OsRng down to rand#1674
dhardy merged 7 commits into
masterfrom
push-putxlzvnyulq

Conversation

@dhardy

@dhardydhardy commented Oct 21, 2025

Copy link
Copy Markdown
Member
  • Added a CHANGELOG.md entry

Summary

Moves OsRng from rand_core to rand.

Removes fns SeedableRng::from_os_rng and try_from_os_rng.

Motivation

This removes the dependency on getrandom, making rand_core dependency-free (unless serde is enabled) and allowing an easier path to stabilisation of rand_core. See rust-random/rand_core#13.

Details

Removed features std and os_rng from rand_core.

@dhardy
dhardy requested a review from newpavlovOctober 21, 2025 12:57
Comment threadsrc/rngs/std.rs
Comment on lines 40 to 44
/// Using a fresh seed **direct from the OS** is the most secure option:
/// ```
/// # use rand::{SeedableRng, rngs::StdRng};
/// let rng = StdRng::from_os_rng();
/// # use rand::{SeedableRng, rngs::{StdRng, OsRng}};
/// let rng = StdRng::try_from_rng(&mut OsRng).unwrap();
/// # let _: StdRng = rng;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is certainly less ergonomic than before, but affected us very little.

Unknown: how much this impacts other users.

@dhardydhardy mentioned this pull request Oct 21, 2025
6 tasks
@dhardydhardy mentioned this pull request Oct 22, 2025
1 task

@vksvks left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reverts a change we did a long time ago. Do you remember why we moved it from rand_os to rand_core in the first place?

@dhardy

Copy link
Copy Markdown
MemberAuthor

SeedableRng::from_os_rng requires OsRng. We want to keep SeedableRng in rand_core, so essentially we must choose between:

  1. Do not offer a from_os_rng method (this PR). This works fine for us but there are clearly some users (GH search).
  2. Status quo: rand_core depends on getrandom for from_os_rng.
  3. Add an extension trait SeedableRngExt: SeedableRng in rand and implement from_os_rng there. We could also add from_thread_rng in that case.

@dhardydhardy mentioned this pull request Oct 25, 2025
@dhardy
dhardy merged commit 5d07c2d into masterOct 30, 2025
15 checks passed
@dhardy
dhardy deleted the push-putxlzvnyulq branch October 30, 2025 08:54
tarcieri added a commit to tarcieri/rand that referenced this pull request Nov 5, 2025
Adds methods for seeding `SeedableRng`s as replacements for the
trait methods `SeedableRng::{from_os_rng, try_from_os_rng}` which were
removed in rust-random#1674.
tarcieri added a commit that referenced this pull request Nov 5, 2025
Adds methods for seeding `SeedableRng`s as replacements for the
trait methods `SeedableRng::{from_os_rng, try_from_os_rng}` which were
removed in #1674.
@tarcieritarcieri mentioned this pull request Nov 5, 2025
@zArubaru

Copy link
Copy Markdown

Now that ChaCha8Rng::from_os_rng() is deprecated and removed, maybe someone else is searching for a way to conditionally seed rng. Probably obvious for some, took me a while 😅

use rand::RngExt;use rand_chacha::rand_core::SeedableRng;use rand_chacha::ChaCha8Rng;let maybe_seed:Option<u64> = None;letmut rng = ifletSome(seed) = maybe_seed {ChaCha8Rng::seed_from_u64(seed)}else{ChaCha8Rng::from_rng(&mut rand::rng())};if rng.random_bool(0.1){println("Maybe this will print, maybe it won't!");}

kodiakhqBot pushed a commit to pdylanross/fatigue that referenced this pull request Jun 25, 2026
Bumps rand from 0.9.4 to 0.10.1.
Changelog
Sourced from rand's changelog.
[0.10.1] — 2026-02-11
This release includes a fix for a soundness bug; see #1763.
Changes
Document panic behavior of make_rng and add #[track_caller] (#1761)
Deprecate feature log (#1763)
#1761: rust-random/rand#1761
#1763: rust-random/rand#1763
[0.10.0] - 2026-02-08
Changes
The dependency on rand_chacha has been replaced with a dependency on chacha20. This changes the implementation behind StdRng, but the output remains the same. There may be some API breakage when using the ChaCha-types directly as these are now the ones in chacha20 instead of rand_chacha (#1642).
Rename fns IndexedRandom::choose_multiple -> sample, choose_multiple_array -> sample_array, choose_multiple_weighted -> sample_weighted, struct SliceChooseIter -> IndexedSamples and fns IteratorRandom::choose_multiple -> sample, choose_multiple_fill -> sample_fill (#1632)
Use Edition 2024 and MSRV 1.85 (#1653)
Let Fill be implemented for element types, not sliceable types (#1652)
Fix OsError::raw_os_error on UEFI targets by returning Option<usize> (#1665)
Replace fn TryRngCore::read_adapter(..) -> RngReadAdapter with simpler struct RngReader (#1669)
Remove fns SeedableRng::from_os_rng, try_from_os_rng (#1674)
Remove Clone support for StdRng, ReseedingRng (#1677)
Use postcard instead of bincode to test the serde feature (#1693)
Avoid excessive allocation in IteratorRandom::sample when amount is much larger than iterator size (#1695)
Rename os_rng -> sys_rng, OsRng -> SysRng, OsError -> SysError (#1697)
Rename Rng -> RngExt as upstream rand_core has renamed RngCore -> Rng (#1717)
Additions
Add fns IndexedRandom::choose_iter, choose_weighted_iter (#1632)
Pub export Xoshiro128PlusPlus, Xoshiro256PlusPlus prngs (#1649)
Pub export ChaCha8Rng, ChaCha12Rng, ChaCha20Rng behind chacha feature (#1659)
Fn rand::make_rng() -> R where R: SeedableRng (#1734)
Removals
Removed ReseedingRng (#1722)
Removed unused feature "nightly" (#1732)
Removed feature small_rng (#1732)
#1632: rust-random/rand#1632
#1642: rust-random/rand#1642
#1649: rust-random/rand#1649
#1652: rust-random/rand#1652
#1653: rust-random/rand#1653
#1659: rust-random/rand#1659
#1665: rust-random/rand#1665
#1669: rust-random/rand#1669
#1674: rust-random/rand#1674
#1677: rust-random/rand#1677
#1693: rust-random/rand#1693
#1695: rust-random/rand#1695
#1697: rust-random/rand#1697
... (truncated)
Commits
27ff4cb Prepare v0.10.1: deprecate feature log (#1763)
98d0638 make_rng: document panic and add #[track_caller] (#1761)
54e5eaa Fix doc error (#1758)
1ce4c08 Bump itoa from 1.0.17 to 1.0.18 in the all-deps group (#1756)
ccb734b docs: fix typo in doc comment (#1754)
357eb7d Bump libc from 0.2.182 to 0.2.183 in the all-deps group (#1753)
5e77fe5 Fix trait references in documentation (#1752)
da89185 Bump the all-deps group with 3 updates (#1751)
50516ff Bump the all-deps group with 2 updates (#1749)
fd71de9 Bump the all-deps group with 2 updates (#1747)
Additional commits viewable in compare view
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@dhardy@zArubaru@vks@newpavlov
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Move OsRng down to rand by dhardy · Pull Request #1674 · rust-random/rand · GitHub
Skip to content

Move OsRng down to rand - #1674

Merged
dhardy merged 7 commits into
masterfrom
push-putxlzvnyulq
Oct 30, 2025
Merged

Move OsRng down to rand#1674
dhardy merged 7 commits into
masterfrom
push-putxlzvnyulq

Conversation

@dhardy

@dhardydhardy commented Oct 21, 2025

Copy link
Copy Markdown
Member
  • Added a CHANGELOG.md entry

Summary

Moves OsRng from rand_core to rand.

Removes fns SeedableRng::from_os_rng and try_from_os_rng.

Motivation

This removes the dependency on getrandom, making rand_core dependency-free (unless serde is enabled) and allowing an easier path to stabilisation of rand_core. See rust-random/rand_core#13.

Details

Removed features std and os_rng from rand_core.

@dhardy
dhardy requested a review from newpavlovOctober 21, 2025 12:57
Comment threadsrc/rngs/std.rs
Comment on lines 40 to 44
/// Using a fresh seed **direct from the OS** is the most secure option:
/// ```
/// # use rand::{SeedableRng, rngs::StdRng};
/// let rng = StdRng::from_os_rng();
/// # use rand::{SeedableRng, rngs::{StdRng, OsRng}};
/// let rng = StdRng::try_from_rng(&mut OsRng).unwrap();
/// # let _: StdRng = rng;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is certainly less ergonomic than before, but affected us very little.

Unknown: how much this impacts other users.

@dhardydhardy mentioned this pull request Oct 21, 2025
6 tasks
@dhardydhardy mentioned this pull request Oct 22, 2025
1 task

@vksvks left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reverts a change we did a long time ago. Do you remember why we moved it from rand_os to rand_core in the first place?

@dhardy

Copy link
Copy Markdown
MemberAuthor

SeedableRng::from_os_rng requires OsRng. We want to keep SeedableRng in rand_core, so essentially we must choose between:

  1. Do not offer a from_os_rng method (this PR). This works fine for us but there are clearly some users (GH search).
  2. Status quo: rand_core depends on getrandom for from_os_rng.
  3. Add an extension trait SeedableRngExt: SeedableRng in rand and implement from_os_rng there. We could also add from_thread_rng in that case.

@dhardydhardy mentioned this pull request Oct 25, 2025
@dhardy
dhardy merged commit 5d07c2d into masterOct 30, 2025
15 checks passed
@dhardy
dhardy deleted the push-putxlzvnyulq branch October 30, 2025 08:54
tarcieri added a commit to tarcieri/rand that referenced this pull request Nov 5, 2025
Adds methods for seeding `SeedableRng`s as replacements for the
trait methods `SeedableRng::{from_os_rng, try_from_os_rng}` which were
removed in rust-random#1674.
tarcieri added a commit that referenced this pull request Nov 5, 2025
Adds methods for seeding `SeedableRng`s as replacements for the
trait methods `SeedableRng::{from_os_rng, try_from_os_rng}` which were
removed in #1674.
@tarcieritarcieri mentioned this pull request Nov 5, 2025
@zArubaru

Copy link
Copy Markdown

Now that ChaCha8Rng::from_os_rng() is deprecated and removed, maybe someone else is searching for a way to conditionally seed rng. Probably obvious for some, took me a while 😅

use rand::RngExt;use rand_chacha::rand_core::SeedableRng;use rand_chacha::ChaCha8Rng;let maybe_seed:Option<u64> = None;letmut rng = ifletSome(seed) = maybe_seed {ChaCha8Rng::seed_from_u64(seed)}else{ChaCha8Rng::from_rng(&mut rand::rng())};if rng.random_bool(0.1){println("Maybe this will print, maybe it won't!");}

kodiakhqBot pushed a commit to pdylanross/fatigue that referenced this pull request Jun 25, 2026
Bumps rand from 0.9.4 to 0.10.1.
Changelog
Sourced from rand's changelog.
[0.10.1] — 2026-02-11
This release includes a fix for a soundness bug; see #1763.
Changes
Document panic behavior of make_rng and add #[track_caller] (#1761)
Deprecate feature log (#1763)
#1761: rust-random/rand#1761
#1763: rust-random/rand#1763
[0.10.0] - 2026-02-08
Changes
The dependency on rand_chacha has been replaced with a dependency on chacha20. This changes the implementation behind StdRng, but the output remains the same. There may be some API breakage when using the ChaCha-types directly as these are now the ones in chacha20 instead of rand_chacha (#1642).
Rename fns IndexedRandom::choose_multiple -> sample, choose_multiple_array -> sample_array, choose_multiple_weighted -> sample_weighted, struct SliceChooseIter -> IndexedSamples and fns IteratorRandom::choose_multiple -> sample, choose_multiple_fill -> sample_fill (#1632)
Use Edition 2024 and MSRV 1.85 (#1653)
Let Fill be implemented for element types, not sliceable types (#1652)
Fix OsError::raw_os_error on UEFI targets by returning Option<usize> (#1665)
Replace fn TryRngCore::read_adapter(..) -> RngReadAdapter with simpler struct RngReader (#1669)
Remove fns SeedableRng::from_os_rng, try_from_os_rng (#1674)
Remove Clone support for StdRng, ReseedingRng (#1677)
Use postcard instead of bincode to test the serde feature (#1693)
Avoid excessive allocation in IteratorRandom::sample when amount is much larger than iterator size (#1695)
Rename os_rng -> sys_rng, OsRng -> SysRng, OsError -> SysError (#1697)
Rename Rng -> RngExt as upstream rand_core has renamed RngCore -> Rng (#1717)
Additions
Add fns IndexedRandom::choose_iter, choose_weighted_iter (#1632)
Pub export Xoshiro128PlusPlus, Xoshiro256PlusPlus prngs (#1649)
Pub export ChaCha8Rng, ChaCha12Rng, ChaCha20Rng behind chacha feature (#1659)
Fn rand::make_rng() -> R where R: SeedableRng (#1734)
Removals
Removed ReseedingRng (#1722)
Removed unused feature "nightly" (#1732)
Removed feature small_rng (#1732)
#1632: rust-random/rand#1632
#1642: rust-random/rand#1642
#1649: rust-random/rand#1649
#1652: rust-random/rand#1652
#1653: rust-random/rand#1653
#1659: rust-random/rand#1659
#1665: rust-random/rand#1665
#1669: rust-random/rand#1669
#1674: rust-random/rand#1674
#1677: rust-random/rand#1677
#1693: rust-random/rand#1693
#1695: rust-random/rand#1695
#1697: rust-random/rand#1697
... (truncated)
Commits
27ff4cb Prepare v0.10.1: deprecate feature log (#1763)
98d0638 make_rng: document panic and add #[track_caller] (#1761)
54e5eaa Fix doc error (#1758)
1ce4c08 Bump itoa from 1.0.17 to 1.0.18 in the all-deps group (#1756)
ccb734b docs: fix typo in doc comment (#1754)
357eb7d Bump libc from 0.2.182 to 0.2.183 in the all-deps group (#1753)
5e77fe5 Fix trait references in documentation (#1752)
da89185 Bump the all-deps group with 3 updates (#1751)
50516ff Bump the all-deps group with 2 updates (#1749)
fd71de9 Bump the all-deps group with 2 updates (#1747)
Additional commits viewable in compare view
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@dhardy@zArubaru@vks@newpavlov
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Move OsRng down to rand by dhardy · Pull Request #1674 · rust-random/rand · GitHub
Skip to content

Move OsRng down to rand - #1674

Merged
dhardy merged 7 commits into
masterfrom
push-putxlzvnyulq
Oct 30, 2025
Merged

Move OsRng down to rand#1674
dhardy merged 7 commits into
masterfrom
push-putxlzvnyulq

Conversation

@dhardy

@dhardydhardy commented Oct 21, 2025

Copy link
Copy Markdown
Member
  • Added a CHANGELOG.md entry

Summary

Moves OsRng from rand_core to rand.

Removes fns SeedableRng::from_os_rng and try_from_os_rng.

Motivation

This removes the dependency on getrandom, making rand_core dependency-free (unless serde is enabled) and allowing an easier path to stabilisation of rand_core. See rust-random/rand_core#13.

Details

Removed features std and os_rng from rand_core.

@dhardy
dhardy requested a review from newpavlovOctober 21, 2025 12:57
Comment threadsrc/rngs/std.rs
Comment on lines 40 to 44
/// Using a fresh seed **direct from the OS** is the most secure option:
/// ```
/// # use rand::{SeedableRng, rngs::StdRng};
/// let rng = StdRng::from_os_rng();
/// # use rand::{SeedableRng, rngs::{StdRng, OsRng}};
/// let rng = StdRng::try_from_rng(&mut OsRng).unwrap();
/// # let _: StdRng = rng;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is certainly less ergonomic than before, but affected us very little.

Unknown: how much this impacts other users.

@dhardydhardy mentioned this pull request Oct 21, 2025
6 tasks
@dhardydhardy mentioned this pull request Oct 22, 2025
1 task

@vksvks left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reverts a change we did a long time ago. Do you remember why we moved it from rand_os to rand_core in the first place?

@dhardy

Copy link
Copy Markdown
MemberAuthor

SeedableRng::from_os_rng requires OsRng. We want to keep SeedableRng in rand_core, so essentially we must choose between:

  1. Do not offer a from_os_rng method (this PR). This works fine for us but there are clearly some users (GH search).
  2. Status quo: rand_core depends on getrandom for from_os_rng.
  3. Add an extension trait SeedableRngExt: SeedableRng in rand and implement from_os_rng there. We could also add from_thread_rng in that case.

@dhardydhardy mentioned this pull request Oct 25, 2025
@dhardy
dhardy merged commit 5d07c2d into masterOct 30, 2025
15 checks passed
@dhardy
dhardy deleted the push-putxlzvnyulq branch October 30, 2025 08:54
tarcieri added a commit to tarcieri/rand that referenced this pull request Nov 5, 2025
Adds methods for seeding `SeedableRng`s as replacements for the
trait methods `SeedableRng::{from_os_rng, try_from_os_rng}` which were
removed in rust-random#1674.
tarcieri added a commit that referenced this pull request Nov 5, 2025
Adds methods for seeding `SeedableRng`s as replacements for the
trait methods `SeedableRng::{from_os_rng, try_from_os_rng}` which were
removed in #1674.
@tarcieritarcieri mentioned this pull request Nov 5, 2025
@zArubaru

Copy link
Copy Markdown

Now that ChaCha8Rng::from_os_rng() is deprecated and removed, maybe someone else is searching for a way to conditionally seed rng. Probably obvious for some, took me a while 😅

use rand::RngExt;use rand_chacha::rand_core::SeedableRng;use rand_chacha::ChaCha8Rng;let maybe_seed:Option<u64> = None;letmut rng = ifletSome(seed) = maybe_seed {ChaCha8Rng::seed_from_u64(seed)}else{ChaCha8Rng::from_rng(&mut rand::rng())};if rng.random_bool(0.1){println("Maybe this will print, maybe it won't!");}

kodiakhqBot pushed a commit to pdylanross/fatigue that referenced this pull request Jun 25, 2026
Bumps rand from 0.9.4 to 0.10.1.
Changelog
Sourced from rand's changelog.
[0.10.1] — 2026-02-11
This release includes a fix for a soundness bug; see #1763.
Changes
Document panic behavior of make_rng and add #[track_caller] (#1761)
Deprecate feature log (#1763)
#1761: rust-random/rand#1761
#1763: rust-random/rand#1763
[0.10.0] - 2026-02-08
Changes
The dependency on rand_chacha has been replaced with a dependency on chacha20. This changes the implementation behind StdRng, but the output remains the same. There may be some API breakage when using the ChaCha-types directly as these are now the ones in chacha20 instead of rand_chacha (#1642).
Rename fns IndexedRandom::choose_multiple -> sample, choose_multiple_array -> sample_array, choose_multiple_weighted -> sample_weighted, struct SliceChooseIter -> IndexedSamples and fns IteratorRandom::choose_multiple -> sample, choose_multiple_fill -> sample_fill (#1632)
Use Edition 2024 and MSRV 1.85 (#1653)
Let Fill be implemented for element types, not sliceable types (#1652)
Fix OsError::raw_os_error on UEFI targets by returning Option<usize> (#1665)
Replace fn TryRngCore::read_adapter(..) -> RngReadAdapter with simpler struct RngReader (#1669)
Remove fns SeedableRng::from_os_rng, try_from_os_rng (#1674)
Remove Clone support for StdRng, ReseedingRng (#1677)
Use postcard instead of bincode to test the serde feature (#1693)
Avoid excessive allocation in IteratorRandom::sample when amount is much larger than iterator size (#1695)
Rename os_rng -> sys_rng, OsRng -> SysRng, OsError -> SysError (#1697)
Rename Rng -> RngExt as upstream rand_core has renamed RngCore -> Rng (#1717)
Additions
Add fns IndexedRandom::choose_iter, choose_weighted_iter (#1632)
Pub export Xoshiro128PlusPlus, Xoshiro256PlusPlus prngs (#1649)
Pub export ChaCha8Rng, ChaCha12Rng, ChaCha20Rng behind chacha feature (#1659)
Fn rand::make_rng() -> R where R: SeedableRng (#1734)
Removals
Removed ReseedingRng (#1722)
Removed unused feature "nightly" (#1732)
Removed feature small_rng (#1732)
#1632: rust-random/rand#1632
#1642: rust-random/rand#1642
#1649: rust-random/rand#1649
#1652: rust-random/rand#1652
#1653: rust-random/rand#1653
#1659: rust-random/rand#1659
#1665: rust-random/rand#1665
#1669: rust-random/rand#1669
#1674: rust-random/rand#1674
#1677: rust-random/rand#1677
#1693: rust-random/rand#1693
#1695: rust-random/rand#1695
#1697: rust-random/rand#1697
... (truncated)
Commits
27ff4cb Prepare v0.10.1: deprecate feature log (#1763)
98d0638 make_rng: document panic and add #[track_caller] (#1761)
54e5eaa Fix doc error (#1758)
1ce4c08 Bump itoa from 1.0.17 to 1.0.18 in the all-deps group (#1756)
ccb734b docs: fix typo in doc comment (#1754)
357eb7d Bump libc from 0.2.182 to 0.2.183 in the all-deps group (#1753)
5e77fe5 Fix trait references in documentation (#1752)
da89185 Bump the all-deps group with 3 updates (#1751)
50516ff Bump the all-deps group with 2 updates (#1749)
fd71de9 Bump the all-deps group with 2 updates (#1747)
Additional commits viewable in compare view
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@dhardy@zArubaru@vks@newpavlov
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Move OsRng down to rand by dhardy · Pull Request #1674 · rust-random/rand · GitHub
Skip to content

Move OsRng down to rand - #1674

Merged
dhardy merged 7 commits into
masterfrom
push-putxlzvnyulq
Oct 30, 2025
Merged

Move OsRng down to rand#1674
dhardy merged 7 commits into
masterfrom
push-putxlzvnyulq

Conversation

@dhardy

@dhardydhardy commented Oct 21, 2025

Copy link
Copy Markdown
Member
  • Added a CHANGELOG.md entry

Summary

Moves OsRng from rand_core to rand.

Removes fns SeedableRng::from_os_rng and try_from_os_rng.

Motivation

This removes the dependency on getrandom, making rand_core dependency-free (unless serde is enabled) and allowing an easier path to stabilisation of rand_core. See rust-random/rand_core#13.

Details

Removed features std and os_rng from rand_core.

@dhardy
dhardy requested a review from newpavlovOctober 21, 2025 12:57
Comment threadsrc/rngs/std.rs
Comment on lines 40 to 44
/// Using a fresh seed **direct from the OS** is the most secure option:
/// ```
/// # use rand::{SeedableRng, rngs::StdRng};
/// let rng = StdRng::from_os_rng();
/// # use rand::{SeedableRng, rngs::{StdRng, OsRng}};
/// let rng = StdRng::try_from_rng(&mut OsRng).unwrap();
/// # let _: StdRng = rng;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is certainly less ergonomic than before, but affected us very little.

Unknown: how much this impacts other users.

@dhardydhardy mentioned this pull request Oct 21, 2025
6 tasks
@dhardydhardy mentioned this pull request Oct 22, 2025
1 task

@vksvks left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reverts a change we did a long time ago. Do you remember why we moved it from rand_os to rand_core in the first place?

@dhardy

Copy link
Copy Markdown
MemberAuthor

SeedableRng::from_os_rng requires OsRng. We want to keep SeedableRng in rand_core, so essentially we must choose between:

  1. Do not offer a from_os_rng method (this PR). This works fine for us but there are clearly some users (GH search).
  2. Status quo: rand_core depends on getrandom for from_os_rng.
  3. Add an extension trait SeedableRngExt: SeedableRng in rand and implement from_os_rng there. We could also add from_thread_rng in that case.

@dhardydhardy mentioned this pull request Oct 25, 2025
@dhardy
dhardy merged commit 5d07c2d into masterOct 30, 2025
15 checks passed
@dhardy
dhardy deleted the push-putxlzvnyulq branch October 30, 2025 08:54
tarcieri added a commit to tarcieri/rand that referenced this pull request Nov 5, 2025
Adds methods for seeding `SeedableRng`s as replacements for the
trait methods `SeedableRng::{from_os_rng, try_from_os_rng}` which were
removed in rust-random#1674.
tarcieri added a commit that referenced this pull request Nov 5, 2025
Adds methods for seeding `SeedableRng`s as replacements for the
trait methods `SeedableRng::{from_os_rng, try_from_os_rng}` which were
removed in #1674.
@tarcieritarcieri mentioned this pull request Nov 5, 2025
@zArubaru

Copy link
Copy Markdown

Now that ChaCha8Rng::from_os_rng() is deprecated and removed, maybe someone else is searching for a way to conditionally seed rng. Probably obvious for some, took me a while 😅

use rand::RngExt;use rand_chacha::rand_core::SeedableRng;use rand_chacha::ChaCha8Rng;let maybe_seed:Option<u64> = None;letmut rng = ifletSome(seed) = maybe_seed {ChaCha8Rng::seed_from_u64(seed)}else{ChaCha8Rng::from_rng(&mut rand::rng())};if rng.random_bool(0.1){println("Maybe this will print, maybe it won't!");}

kodiakhqBot pushed a commit to pdylanross/fatigue that referenced this pull request Jun 25, 2026
Bumps rand from 0.9.4 to 0.10.1.
Changelog
Sourced from rand's changelog.
[0.10.1] — 2026-02-11
This release includes a fix for a soundness bug; see #1763.
Changes
Document panic behavior of make_rng and add #[track_caller] (#1761)
Deprecate feature log (#1763)
#1761: rust-random/rand#1761
#1763: rust-random/rand#1763
[0.10.0] - 2026-02-08
Changes
The dependency on rand_chacha has been replaced with a dependency on chacha20. This changes the implementation behind StdRng, but the output remains the same. There may be some API breakage when using the ChaCha-types directly as these are now the ones in chacha20 instead of rand_chacha (#1642).
Rename fns IndexedRandom::choose_multiple -> sample, choose_multiple_array -> sample_array, choose_multiple_weighted -> sample_weighted, struct SliceChooseIter -> IndexedSamples and fns IteratorRandom::choose_multiple -> sample, choose_multiple_fill -> sample_fill (#1632)
Use Edition 2024 and MSRV 1.85 (#1653)
Let Fill be implemented for element types, not sliceable types (#1652)
Fix OsError::raw_os_error on UEFI targets by returning Option<usize> (#1665)
Replace fn TryRngCore::read_adapter(..) -> RngReadAdapter with simpler struct RngReader (#1669)
Remove fns SeedableRng::from_os_rng, try_from_os_rng (#1674)
Remove Clone support for StdRng, ReseedingRng (#1677)
Use postcard instead of bincode to test the serde feature (#1693)
Avoid excessive allocation in IteratorRandom::sample when amount is much larger than iterator size (#1695)
Rename os_rng -> sys_rng, OsRng -> SysRng, OsError -> SysError (#1697)
Rename Rng -> RngExt as upstream rand_core has renamed RngCore -> Rng (#1717)
Additions
Add fns IndexedRandom::choose_iter, choose_weighted_iter (#1632)
Pub export Xoshiro128PlusPlus, Xoshiro256PlusPlus prngs (#1649)
Pub export ChaCha8Rng, ChaCha12Rng, ChaCha20Rng behind chacha feature (#1659)
Fn rand::make_rng() -> R where R: SeedableRng (#1734)
Removals
Removed ReseedingRng (#1722)
Removed unused feature "nightly" (#1732)
Removed feature small_rng (#1732)
#1632: rust-random/rand#1632
#1642: rust-random/rand#1642
#1649: rust-random/rand#1649
#1652: rust-random/rand#1652
#1653: rust-random/rand#1653
#1659: rust-random/rand#1659
#1665: rust-random/rand#1665
#1669: rust-random/rand#1669
#1674: rust-random/rand#1674
#1677: rust-random/rand#1677
#1693: rust-random/rand#1693
#1695: rust-random/rand#1695
#1697: rust-random/rand#1697
... (truncated)
Commits
27ff4cb Prepare v0.10.1: deprecate feature log (#1763)
98d0638 make_rng: document panic and add #[track_caller] (#1761)
54e5eaa Fix doc error (#1758)
1ce4c08 Bump itoa from 1.0.17 to 1.0.18 in the all-deps group (#1756)
ccb734b docs: fix typo in doc comment (#1754)
357eb7d Bump libc from 0.2.182 to 0.2.183 in the all-deps group (#1753)
5e77fe5 Fix trait references in documentation (#1752)
da89185 Bump the all-deps group with 3 updates (#1751)
50516ff Bump the all-deps group with 2 updates (#1749)
fd71de9 Bump the all-deps group with 2 updates (#1747)
Additional commits viewable in compare view
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@dhardy@zArubaru@vks@newpavlov
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Move OsRng down to rand by dhardy · Pull Request #1674 · rust-random/rand · GitHub
Skip to content

Move OsRng down to rand - #1674

Merged
dhardy merged 7 commits into
masterfrom
push-putxlzvnyulq
Oct 30, 2025
Merged

Move OsRng down to rand#1674
dhardy merged 7 commits into
masterfrom
push-putxlzvnyulq

Conversation

@dhardy

@dhardydhardy commented Oct 21, 2025

Copy link
Copy Markdown
Member
  • Added a CHANGELOG.md entry

Summary

Moves OsRng from rand_core to rand.

Removes fns SeedableRng::from_os_rng and try_from_os_rng.

Motivation

This removes the dependency on getrandom, making rand_core dependency-free (unless serde is enabled) and allowing an easier path to stabilisation of rand_core. See rust-random/rand_core#13.

Details

Removed features std and os_rng from rand_core.

@dhardy
dhardy requested a review from newpavlovOctober 21, 2025 12:57
Comment threadsrc/rngs/std.rs
Comment on lines 40 to 44
/// Using a fresh seed **direct from the OS** is the most secure option:
/// ```
/// # use rand::{SeedableRng, rngs::StdRng};
/// let rng = StdRng::from_os_rng();
/// # use rand::{SeedableRng, rngs::{StdRng, OsRng}};
/// let rng = StdRng::try_from_rng(&mut OsRng).unwrap();
/// # let _: StdRng = rng;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is certainly less ergonomic than before, but affected us very little.

Unknown: how much this impacts other users.

@dhardydhardy mentioned this pull request Oct 21, 2025
6 tasks
@dhardydhardy mentioned this pull request Oct 22, 2025
1 task

@vksvks left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reverts a change we did a long time ago. Do you remember why we moved it from rand_os to rand_core in the first place?

@dhardy

Copy link
Copy Markdown
MemberAuthor

SeedableRng::from_os_rng requires OsRng. We want to keep SeedableRng in rand_core, so essentially we must choose between:

  1. Do not offer a from_os_rng method (this PR). This works fine for us but there are clearly some users (GH search).
  2. Status quo: rand_core depends on getrandom for from_os_rng.
  3. Add an extension trait SeedableRngExt: SeedableRng in rand and implement from_os_rng there. We could also add from_thread_rng in that case.

@dhardydhardy mentioned this pull request Oct 25, 2025
@dhardy
dhardy merged commit 5d07c2d into masterOct 30, 2025
15 checks passed
@dhardy
dhardy deleted the push-putxlzvnyulq branch October 30, 2025 08:54
tarcieri added a commit to tarcieri/rand that referenced this pull request Nov 5, 2025
Adds methods for seeding `SeedableRng`s as replacements for the
trait methods `SeedableRng::{from_os_rng, try_from_os_rng}` which were
removed in rust-random#1674.
tarcieri added a commit that referenced this pull request Nov 5, 2025
Adds methods for seeding `SeedableRng`s as replacements for the
trait methods `SeedableRng::{from_os_rng, try_from_os_rng}` which were
removed in #1674.
@tarcieritarcieri mentioned this pull request Nov 5, 2025
@zArubaru

Copy link
Copy Markdown

Now that ChaCha8Rng::from_os_rng() is deprecated and removed, maybe someone else is searching for a way to conditionally seed rng. Probably obvious for some, took me a while 😅

use rand::RngExt;use rand_chacha::rand_core::SeedableRng;use rand_chacha::ChaCha8Rng;let maybe_seed:Option<u64> = None;letmut rng = ifletSome(seed) = maybe_seed {ChaCha8Rng::seed_from_u64(seed)}else{ChaCha8Rng::from_rng(&mut rand::rng())};if rng.random_bool(0.1){println("Maybe this will print, maybe it won't!");}

kodiakhqBot pushed a commit to pdylanross/fatigue that referenced this pull request Jun 25, 2026
Bumps rand from 0.9.4 to 0.10.1.
Changelog
Sourced from rand's changelog.
[0.10.1] — 2026-02-11
This release includes a fix for a soundness bug; see #1763.
Changes
Document panic behavior of make_rng and add #[track_caller] (#1761)
Deprecate feature log (#1763)
#1761: rust-random/rand#1761
#1763: rust-random/rand#1763
[0.10.0] - 2026-02-08
Changes
The dependency on rand_chacha has been replaced with a dependency on chacha20. This changes the implementation behind StdRng, but the output remains the same. There may be some API breakage when using the ChaCha-types directly as these are now the ones in chacha20 instead of rand_chacha (#1642).
Rename fns IndexedRandom::choose_multiple -> sample, choose_multiple_array -> sample_array, choose_multiple_weighted -> sample_weighted, struct SliceChooseIter -> IndexedSamples and fns IteratorRandom::choose_multiple -> sample, choose_multiple_fill -> sample_fill (#1632)
Use Edition 2024 and MSRV 1.85 (#1653)
Let Fill be implemented for element types, not sliceable types (#1652)
Fix OsError::raw_os_error on UEFI targets by returning Option<usize> (#1665)
Replace fn TryRngCore::read_adapter(..) -> RngReadAdapter with simpler struct RngReader (#1669)
Remove fns SeedableRng::from_os_rng, try_from_os_rng (#1674)
Remove Clone support for StdRng, ReseedingRng (#1677)
Use postcard instead of bincode to test the serde feature (#1693)
Avoid excessive allocation in IteratorRandom::sample when amount is much larger than iterator size (#1695)
Rename os_rng -> sys_rng, OsRng -> SysRng, OsError -> SysError (#1697)
Rename Rng -> RngExt as upstream rand_core has renamed RngCore -> Rng (#1717)
Additions
Add fns IndexedRandom::choose_iter, choose_weighted_iter (#1632)
Pub export Xoshiro128PlusPlus, Xoshiro256PlusPlus prngs (#1649)
Pub export ChaCha8Rng, ChaCha12Rng, ChaCha20Rng behind chacha feature (#1659)
Fn rand::make_rng() -> R where R: SeedableRng (#1734)
Removals
Removed ReseedingRng (#1722)
Removed unused feature "nightly" (#1732)
Removed feature small_rng (#1732)
#1632: rust-random/rand#1632
#1642: rust-random/rand#1642
#1649: rust-random/rand#1649
#1652: rust-random/rand#1652
#1653: rust-random/rand#1653
#1659: rust-random/rand#1659
#1665: rust-random/rand#1665
#1669: rust-random/rand#1669
#1674: rust-random/rand#1674
#1677: rust-random/rand#1677
#1693: rust-random/rand#1693
#1695: rust-random/rand#1695
#1697: rust-random/rand#1697
... (truncated)
Commits
27ff4cb Prepare v0.10.1: deprecate feature log (#1763)
98d0638 make_rng: document panic and add #[track_caller] (#1761)
54e5eaa Fix doc error (#1758)
1ce4c08 Bump itoa from 1.0.17 to 1.0.18 in the all-deps group (#1756)
ccb734b docs: fix typo in doc comment (#1754)
357eb7d Bump libc from 0.2.182 to 0.2.183 in the all-deps group (#1753)
5e77fe5 Fix trait references in documentation (#1752)
da89185 Bump the all-deps group with 3 updates (#1751)
50516ff Bump the all-deps group with 2 updates (#1749)
fd71de9 Bump the all-deps group with 2 updates (#1747)
Additional commits viewable in compare view
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@dhardy@zArubaru@vks@newpavlov
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Move OsRng down to rand by dhardy · Pull Request #1674 · rust-random/rand · GitHub
Skip to content

Move OsRng down to rand - #1674

Merged
dhardy merged 7 commits into
masterfrom
push-putxlzvnyulq
Oct 30, 2025
Merged

Move OsRng down to rand#1674
dhardy merged 7 commits into
masterfrom
push-putxlzvnyulq

Conversation

@dhardy

@dhardydhardy commented Oct 21, 2025

Copy link
Copy Markdown
Member
  • Added a CHANGELOG.md entry

Summary

Moves OsRng from rand_core to rand.

Removes fns SeedableRng::from_os_rng and try_from_os_rng.

Motivation

This removes the dependency on getrandom, making rand_core dependency-free (unless serde is enabled) and allowing an easier path to stabilisation of rand_core. See rust-random/rand_core#13.

Details

Removed features std and os_rng from rand_core.

@dhardy
dhardy requested a review from newpavlovOctober 21, 2025 12:57
Comment threadsrc/rngs/std.rs
Comment on lines 40 to 44
/// Using a fresh seed **direct from the OS** is the most secure option:
/// ```
/// # use rand::{SeedableRng, rngs::StdRng};
/// let rng = StdRng::from_os_rng();
/// # use rand::{SeedableRng, rngs::{StdRng, OsRng}};
/// let rng = StdRng::try_from_rng(&mut OsRng).unwrap();
/// # let _: StdRng = rng;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is certainly less ergonomic than before, but affected us very little.

Unknown: how much this impacts other users.

@dhardydhardy mentioned this pull request Oct 21, 2025
6 tasks
@dhardydhardy mentioned this pull request Oct 22, 2025
1 task

@vksvks left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reverts a change we did a long time ago. Do you remember why we moved it from rand_os to rand_core in the first place?

@dhardy

Copy link
Copy Markdown
MemberAuthor

SeedableRng::from_os_rng requires OsRng. We want to keep SeedableRng in rand_core, so essentially we must choose between:

  1. Do not offer a from_os_rng method (this PR). This works fine for us but there are clearly some users (GH search).
  2. Status quo: rand_core depends on getrandom for from_os_rng.
  3. Add an extension trait SeedableRngExt: SeedableRng in rand and implement from_os_rng there. We could also add from_thread_rng in that case.

@dhardydhardy mentioned this pull request Oct 25, 2025
@dhardy
dhardy merged commit 5d07c2d into masterOct 30, 2025
15 checks passed
@dhardy
dhardy deleted the push-putxlzvnyulq branch October 30, 2025 08:54
tarcieri added a commit to tarcieri/rand that referenced this pull request Nov 5, 2025
Adds methods for seeding `SeedableRng`s as replacements for the
trait methods `SeedableRng::{from_os_rng, try_from_os_rng}` which were
removed in rust-random#1674.
tarcieri added a commit that referenced this pull request Nov 5, 2025
Adds methods for seeding `SeedableRng`s as replacements for the
trait methods `SeedableRng::{from_os_rng, try_from_os_rng}` which were
removed in #1674.
@tarcieritarcieri mentioned this pull request Nov 5, 2025
@zArubaru

Copy link
Copy Markdown

Now that ChaCha8Rng::from_os_rng() is deprecated and removed, maybe someone else is searching for a way to conditionally seed rng. Probably obvious for some, took me a while 😅

use rand::RngExt;use rand_chacha::rand_core::SeedableRng;use rand_chacha::ChaCha8Rng;let maybe_seed:Option<u64> = None;letmut rng = ifletSome(seed) = maybe_seed {ChaCha8Rng::seed_from_u64(seed)}else{ChaCha8Rng::from_rng(&mut rand::rng())};if rng.random_bool(0.1){println("Maybe this will print, maybe it won't!");}

kodiakhqBot pushed a commit to pdylanross/fatigue that referenced this pull request Jun 25, 2026
Bumps rand from 0.9.4 to 0.10.1.
Changelog
Sourced from rand's changelog.
[0.10.1] — 2026-02-11
This release includes a fix for a soundness bug; see #1763.
Changes
Document panic behavior of make_rng and add #[track_caller] (#1761)
Deprecate feature log (#1763)
#1761: rust-random/rand#1761
#1763: rust-random/rand#1763
[0.10.0] - 2026-02-08
Changes
The dependency on rand_chacha has been replaced with a dependency on chacha20. This changes the implementation behind StdRng, but the output remains the same. There may be some API breakage when using the ChaCha-types directly as these are now the ones in chacha20 instead of rand_chacha (#1642).
Rename fns IndexedRandom::choose_multiple -> sample, choose_multiple_array -> sample_array, choose_multiple_weighted -> sample_weighted, struct SliceChooseIter -> IndexedSamples and fns IteratorRandom::choose_multiple -> sample, choose_multiple_fill -> sample_fill (#1632)
Use Edition 2024 and MSRV 1.85 (#1653)
Let Fill be implemented for element types, not sliceable types (#1652)
Fix OsError::raw_os_error on UEFI targets by returning Option<usize> (#1665)
Replace fn TryRngCore::read_adapter(..) -> RngReadAdapter with simpler struct RngReader (#1669)
Remove fns SeedableRng::from_os_rng, try_from_os_rng (#1674)
Remove Clone support for StdRng, ReseedingRng (#1677)
Use postcard instead of bincode to test the serde feature (#1693)
Avoid excessive allocation in IteratorRandom::sample when amount is much larger than iterator size (#1695)
Rename os_rng -> sys_rng, OsRng -> SysRng, OsError -> SysError (#1697)
Rename Rng -> RngExt as upstream rand_core has renamed RngCore -> Rng (#1717)
Additions
Add fns IndexedRandom::choose_iter, choose_weighted_iter (#1632)
Pub export Xoshiro128PlusPlus, Xoshiro256PlusPlus prngs (#1649)
Pub export ChaCha8Rng, ChaCha12Rng, ChaCha20Rng behind chacha feature (#1659)
Fn rand::make_rng() -> R where R: SeedableRng (#1734)
Removals
Removed ReseedingRng (#1722)
Removed unused feature "nightly" (#1732)
Removed feature small_rng (#1732)
#1632: rust-random/rand#1632
#1642: rust-random/rand#1642
#1649: rust-random/rand#1649
#1652: rust-random/rand#1652
#1653: rust-random/rand#1653
#1659: rust-random/rand#1659
#1665: rust-random/rand#1665
#1669: rust-random/rand#1669
#1674: rust-random/rand#1674
#1677: rust-random/rand#1677
#1693: rust-random/rand#1693
#1695: rust-random/rand#1695
#1697: rust-random/rand#1697
... (truncated)
Commits
27ff4cb Prepare v0.10.1: deprecate feature log (#1763)
98d0638 make_rng: document panic and add #[track_caller] (#1761)
54e5eaa Fix doc error (#1758)
1ce4c08 Bump itoa from 1.0.17 to 1.0.18 in the all-deps group (#1756)
ccb734b docs: fix typo in doc comment (#1754)
357eb7d Bump libc from 0.2.182 to 0.2.183 in the all-deps group (#1753)
5e77fe5 Fix trait references in documentation (#1752)
da89185 Bump the all-deps group with 3 updates (#1751)
50516ff Bump the all-deps group with 2 updates (#1749)
fd71de9 Bump the all-deps group with 2 updates (#1747)
Additional commits viewable in compare view
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@dhardy@zArubaru@vks@newpavlov
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Move OsRng down to rand by dhardy · Pull Request #1674 · rust-random/rand · GitHub
Skip to content

Move OsRng down to rand - #1674

Merged
dhardy merged 7 commits into
masterfrom
push-putxlzvnyulq
Oct 30, 2025
Merged

Move OsRng down to rand#1674
dhardy merged 7 commits into
masterfrom
push-putxlzvnyulq

Conversation

@dhardy

@dhardydhardy commented Oct 21, 2025

Copy link
Copy Markdown
Member
  • Added a CHANGELOG.md entry

Summary

Moves OsRng from rand_core to rand.

Removes fns SeedableRng::from_os_rng and try_from_os_rng.

Motivation

This removes the dependency on getrandom, making rand_core dependency-free (unless serde is enabled) and allowing an easier path to stabilisation of rand_core. See rust-random/rand_core#13.

Details

Removed features std and os_rng from rand_core.

@dhardy
dhardy requested a review from newpavlovOctober 21, 2025 12:57
Comment threadsrc/rngs/std.rs
Comment on lines 40 to 44
/// Using a fresh seed **direct from the OS** is the most secure option:
/// ```
/// # use rand::{SeedableRng, rngs::StdRng};
/// let rng = StdRng::from_os_rng();
/// # use rand::{SeedableRng, rngs::{StdRng, OsRng}};
/// let rng = StdRng::try_from_rng(&mut OsRng).unwrap();
/// # let _: StdRng = rng;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is certainly less ergonomic than before, but affected us very little.

Unknown: how much this impacts other users.

@dhardydhardy mentioned this pull request Oct 21, 2025
6 tasks
@dhardydhardy mentioned this pull request Oct 22, 2025
1 task

@vksvks left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reverts a change we did a long time ago. Do you remember why we moved it from rand_os to rand_core in the first place?

@dhardy

Copy link
Copy Markdown
MemberAuthor

SeedableRng::from_os_rng requires OsRng. We want to keep SeedableRng in rand_core, so essentially we must choose between:

  1. Do not offer a from_os_rng method (this PR). This works fine for us but there are clearly some users (GH search).
  2. Status quo: rand_core depends on getrandom for from_os_rng.
  3. Add an extension trait SeedableRngExt: SeedableRng in rand and implement from_os_rng there. We could also add from_thread_rng in that case.

@dhardydhardy mentioned this pull request Oct 25, 2025
@dhardy
dhardy merged commit 5d07c2d into masterOct 30, 2025
15 checks passed
@dhardy
dhardy deleted the push-putxlzvnyulq branch October 30, 2025 08:54
tarcieri added a commit to tarcieri/rand that referenced this pull request Nov 5, 2025
Adds methods for seeding `SeedableRng`s as replacements for the
trait methods `SeedableRng::{from_os_rng, try_from_os_rng}` which were
removed in rust-random#1674.
tarcieri added a commit that referenced this pull request Nov 5, 2025
Adds methods for seeding `SeedableRng`s as replacements for the
trait methods `SeedableRng::{from_os_rng, try_from_os_rng}` which were
removed in #1674.
@tarcieritarcieri mentioned this pull request Nov 5, 2025
@zArubaru

Copy link
Copy Markdown

Now that ChaCha8Rng::from_os_rng() is deprecated and removed, maybe someone else is searching for a way to conditionally seed rng. Probably obvious for some, took me a while 😅

use rand::RngExt;use rand_chacha::rand_core::SeedableRng;use rand_chacha::ChaCha8Rng;let maybe_seed:Option<u64> = None;letmut rng = ifletSome(seed) = maybe_seed {ChaCha8Rng::seed_from_u64(seed)}else{ChaCha8Rng::from_rng(&mut rand::rng())};if rng.random_bool(0.1){println("Maybe this will print, maybe it won't!");}

kodiakhqBot pushed a commit to pdylanross/fatigue that referenced this pull request Jun 25, 2026
Bumps rand from 0.9.4 to 0.10.1.
Changelog
Sourced from rand's changelog.
[0.10.1] — 2026-02-11
This release includes a fix for a soundness bug; see #1763.
Changes
Document panic behavior of make_rng and add #[track_caller] (#1761)
Deprecate feature log (#1763)
#1761: rust-random/rand#1761
#1763: rust-random/rand#1763
[0.10.0] - 2026-02-08
Changes
The dependency on rand_chacha has been replaced with a dependency on chacha20. This changes the implementation behind StdRng, but the output remains the same. There may be some API breakage when using the ChaCha-types directly as these are now the ones in chacha20 instead of rand_chacha (#1642).
Rename fns IndexedRandom::choose_multiple -> sample, choose_multiple_array -> sample_array, choose_multiple_weighted -> sample_weighted, struct SliceChooseIter -> IndexedSamples and fns IteratorRandom::choose_multiple -> sample, choose_multiple_fill -> sample_fill (#1632)
Use Edition 2024 and MSRV 1.85 (#1653)
Let Fill be implemented for element types, not sliceable types (#1652)
Fix OsError::raw_os_error on UEFI targets by returning Option<usize> (#1665)
Replace fn TryRngCore::read_adapter(..) -> RngReadAdapter with simpler struct RngReader (#1669)
Remove fns SeedableRng::from_os_rng, try_from_os_rng (#1674)
Remove Clone support for StdRng, ReseedingRng (#1677)
Use postcard instead of bincode to test the serde feature (#1693)
Avoid excessive allocation in IteratorRandom::sample when amount is much larger than iterator size (#1695)
Rename os_rng -> sys_rng, OsRng -> SysRng, OsError -> SysError (#1697)
Rename Rng -> RngExt as upstream rand_core has renamed RngCore -> Rng (#1717)
Additions
Add fns IndexedRandom::choose_iter, choose_weighted_iter (#1632)
Pub export Xoshiro128PlusPlus, Xoshiro256PlusPlus prngs (#1649)
Pub export ChaCha8Rng, ChaCha12Rng, ChaCha20Rng behind chacha feature (#1659)
Fn rand::make_rng() -> R where R: SeedableRng (#1734)
Removals
Removed ReseedingRng (#1722)
Removed unused feature "nightly" (#1732)
Removed feature small_rng (#1732)
#1632: rust-random/rand#1632
#1642: rust-random/rand#1642
#1649: rust-random/rand#1649
#1652: rust-random/rand#1652
#1653: rust-random/rand#1653
#1659: rust-random/rand#1659
#1665: rust-random/rand#1665
#1669: rust-random/rand#1669
#1674: rust-random/rand#1674
#1677: rust-random/rand#1677
#1693: rust-random/rand#1693
#1695: rust-random/rand#1695
#1697: rust-random/rand#1697
... (truncated)
Commits
27ff4cb Prepare v0.10.1: deprecate feature log (#1763)
98d0638 make_rng: document panic and add #[track_caller] (#1761)
54e5eaa Fix doc error (#1758)
1ce4c08 Bump itoa from 1.0.17 to 1.0.18 in the all-deps group (#1756)
ccb734b docs: fix typo in doc comment (#1754)
357eb7d Bump libc from 0.2.182 to 0.2.183 in the all-deps group (#1753)
5e77fe5 Fix trait references in documentation (#1752)
da89185 Bump the all-deps group with 3 updates (#1751)
50516ff Bump the all-deps group with 2 updates (#1749)
fd71de9 Bump the all-deps group with 2 updates (#1747)
Additional commits viewable in compare view
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@dhardy@zArubaru@vks@newpavlov